着信 SMS から携帯電話番号を取得すると、国コードが追加されます。
データベース内の一致する連絡先には、私が使用している連絡先名を取得するための国コードが含まれていない可能性があるため:
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 を見ていますが、選択コードはほとんど同じであるため、なぜ 2 番目に機能しないのかわかりません。
何か案は?