public static boolean contactExists(Activity _activity, String number){
Uri lookupUri = Uri.withAppendedpath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI,Uri.encode(number));
String[] mPhoneNumberProjection = { ContactsContract.PhoneLookup._ID, ContactsContract.PhoneLookup.NUMBER, ContactsContract.PhoneLookup.disPLAY_NAME };
Cursor cur = _activity.getContentResolver().query(lookupUri,mPhoneNumberProjection, null, null, null);
try {
if (cur.movetoFirst()) {
return true;
}
} finally {
if (cur != null)
cur.close();
}
return false;
}
但是,如果设备上存在联系人,这总是给我错误的提示.
我也将权限集成在清单中.
解决方法:
几个小时后,我发现了错误,基本上是在某些设备上,上面的代码可能无法正常工作.要100%确定,您将需要使用以下代码:
public String get_name() {
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
null, null, null);
if (cur.getCount() > 0) {
while (cur.movetoNext()) {
String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.disPLAY_NAME));
if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
System.out.println("name : " + name + ", ID : " + id);
if (name.equals(number)) {
title_holder = name;
break;
}else{
title_holder = number;
break;
}
}
}
}
return title_holder;
}
如您所见,它列出了设备中的所有联系人,而不仅仅是您可以检查它是否与您提供的号码匹配.
String myPhone = getCallName.substring(16, getCallName.length() - 4);
if (!myPhone.matches("^[\\d]{1,}$")) {
myPhone = context.getString(R.string.withheld_number);
} else if (listDir.get(i).getUserNameFromContact() != myPhone) {
myPhone = listDir.get(i).getUserNameFromContact();
}