我必须根据电话号码搜索联系人。以下是用于获取联系人的代码。我正在使用的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”的联系人。由于一些Android手机可以节省电话号码与之间的空间。
我该如何解决这个问题。任何帮助表示赞赏。
答案 0 :(得分:0)
试试这个:
public String getContactNameByNumber(String number) {
Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
String name = "?";
ContentResolver contentResolver = getContentResolver();
Cursor contact = contentResolver.query(uri, new String[] {BaseColumns._ID,
ContactsContract.PhoneLookup.DISPLAY_NAME }, null, null, null);
try {
if (contact != null && contact.getCount() > 0) {
contact.moveToNext();
name = contact.getString(contactLookup.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
}
} finally {
if (contact != null) {
contact.close();
}
}
return name;
}
答案 1 :(得分:-1)
在您的代码中进行更改
constraint.toString()而不是写constain.replaceAll(“”,“”);
删除字符串
中的所有空格答案 2 :(得分:-1)
试试这个:
String whereName = ContactsContract.Data.MIMETYPE + " = ?";
String number;
String[] whereNameParams = new String[] { ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE };
Cursor nameCur = con.query(ContactsContract.Data.CONTENT_URI, null, whereName, whereNameParams, ContactsContract.CommonDataKinds.Phone.NUMBER);
while (nameCur.moveToNext()) {
number = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
if (number != null) {
if (number.contains(num)) {
System.out.println(number);
}
}
}
nameCur.close();
在回答评论中说: "我正在尝试搜索以" 1234"开头的联系人,结果应该返回我的联系人电话号码" 1234567890"和" 123 4567 890"。"
我的代码解决了这个问题。