从传入的短信中检索手机号码时,它会附加国家代码。
现在,由于数据库中的匹配联系人可能不包括国家代码来获取我正在使用的联系人姓名:
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;
}
如果数字完全匹配,则此方法非常有效,但如果不是,则不返回任何内容。我需要这种方法来查找联系人的 ID,其中其号码保存为“01111111111”,传入号码为“+441111111111”。尽管他们正在查看不同的 URI,但选择代码几乎相同,所以我不确定为什么它不适用于第二个。
有任何想法吗?