當從傳入的短信中檢索手機號碼時,它會附加國家代碼。
現在,在數據庫匹配的聯繫人可能不包括國家代碼來獲取聯繫人姓名我使用:Android - 從號碼與國家或地區代碼聯繫
public static String getContactName(String number, Context context) {
try {
Uri personUri = Uri.withAppendedPath(
ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number.trim()));
String selection = PhoneLookup.NUMBER + " LIKE %" + number.trim() + "%";
Cursor cur = context.getContentResolver().query(personUri,
new String[] {
PhoneLookup.DISPLAY_NAME
},
selection, null, null);
if (cur.moveToFirst()) {
String str = cur.getString(cur.getColumnIndex(PhoneLookup.DISPLAY_NAME));
cur.close();
return str;
}
} catch (Exception e) {
//e.printStackTrace();
return number;
}
return number;
}
這工作完全,如果我通過精確匹配或部分匹配。但是,如果我想我正在使用此代碼聯繫ID:
public static Contact getContact(String number, ContentResolver contentResolver) {
Contact contact = new Contact(-1, number);
try {
Uri personUri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(number));
String selection = ContactsContract.CommonDataKinds.Phone.NUMBER + " LIKE '%" + number + "%'";
Cursor cur = contentResolver.query(personUri,
new String[] {
ContactsContract.CommonDataKinds.Phone.CONTACT_ID, PhoneLookup.DISPLAY_NAME
},
selection, null, null);
if (cur.moveToFirst()) {
contact = new Contact(Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID))),
cur.getString(cur.getColumnIndex(PhoneLookup.DISPLAY_NAME)));
}
cur.close();
} catch (Exception e) {}
return contact;
}
這完美的作品,如果數字是精確匹配,但如果它是不是沒有返回。我需要這種方法來查找其號碼保存爲「01111111111」並且來電號碼爲「+441111111111」的聯繫人的ID。雖然他們正在查看不同的URI,但選擇代碼幾乎相同,所以我不確定爲什麼它不適用於第二個。
任何想法?
這看起來更像我以後 - 我沒有在我的atm前面的代碼,但我會檢查一下,看看這是否適用於我,謝謝 – crazyfool 2013-05-09 14:37:32
它看起來不符合印度或俄羅斯數字。例如:聯繫號碼89997654321,來電+79997654321 – Gaket 2018-01-30 06:42:00