在我的应用程序中,我尝试使用电话号码搜索联系人。我正在搜索的电话号码始终采用相同的格式(例如,#12; 123456789')。 但是以下代码并不检索我预期的所有联系人。 主要问题可能是手机中不同格式的电话号码:某些联系人保存在' +34 345 6789'另一个用' 0123 456789'保存。 虽然我尝试了ContactsContract.PhoneLookup.NORMALIZED_NUMBER,但我的代码只检索了' 123456789' -format中与phonenumbers一起保存的联系人。
private String getContactDetails(Context context, String number) {
String[] projection = new String[] {
ContactsContract.PhoneLookup.DISPLAY_NAME,
ContactsContract.PhoneLookup._ID,
ContactsContract.PhoneLookup.LOOKUP_KEY};
int len = number.length();
Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number.substring(len-7)));
String selection = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
selection = ContactsContract.PhoneLookup.NORMALIZED_NUMBER + " LIKE %" + number.substring(len-7) + "%";
}
Cursor cursor = context.getContentResolver().query(contactUri, projection, selection, null, null);
String name = null;
if(cursor != null) {
if (cursor.moveToFirst()) {
name = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME));
}
cursor.close();
}
return name;
}
答案 0 :(得分:1)
不要将PhoneLookup.CONTENT_FILTER_URI
与selection
同时使用,CONTENT_FILTER_URI
用于使用URI本身搜索数据,并且不应进行任何选择。
PhoneLookup.NORMALIZED_NUMBER
列用于以e164格式返回结果,而不是用于查询。
试试这个:
Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode("123456789"));
String[] projection = new String[] { PhoneLookup.NUMBER, PhoneLookup.NORMALIZED_NUMBER };
Cursor c = getContentResolver().query(uri, projection, null, null, null);
if (c != null) {
if (c.moveToFirst()) {
String number = c.getString(0);
String e164_number = c.getString(1);
Log.d(TAG, "number=" + number + ", e164=" + e164_number);
} else {
Log.d(TAG, "couldn't find number");
}
}
c.close();