【发布时间】:2014-11-01 12:54:40
【问题描述】:
我必须根据电话号码搜索联系人。这是用于获取联系人的代码。我使用的 Android API 级别是 15
String[] projection = new String[] {
ContactsContract.CommonDataKinds.Phone._ID,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.TYPE,
ContactsContract.CommonDataKinds.Phone.NUMBER};
Cursor query = mContent.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection,
ContactsContract.CommonDataKinds.Phone.NUMBER + " LIKE '%" + constraint.toString() + "%'"
,null, ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
我能够获取联系人表中保存的电话号码中没有空格的联系人。如果电话号码之间有空格,则上述查询失败。例如,对于一个联系人,如果电话号码保存为 1234567890,并且当我使用值 1234 进行搜索时,将检索到此联系人。但如果联系人保存为“123 456 7890”则失败。
底线,当我尝试使用电话号码搜索具有或包含“1234”的联系人时,结果应该返回给我电话号码为“1234567890”和“123 4567 890”的联系人。因为有些安卓手机会用空格保存电话号码。
我该如何解决这个问题。任何帮助表示赞赏。
【问题讨论】:
-
在
constraint的每个字符之间添加%是一种选择 -
长话短说,要通过电话号码搜索,您需要使用
ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER,其中包含E.164格式的电话号码。 developer.android.com/reference/android/provider/… -
@SarwarErfan 对不起,我不能使用这个常量,我所在的 API 级别是 15。
ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER是在 API 16 中添加的。 -
对于较旧的 api,请检查:stackoverflow.com/questions/4579009/…
-
你能找到解决办法吗?
标签: android android-sqlite android-contacts android-contentresolver