ユーザーからの最近の通話を一覧表示するアクティビティを作成しています。要件は、ユーザーが呼び出しを受信すると、phone number
DBcontact name
に保存され、後でアクティビティに表示されることです。連絡先の名前を取得するには、電話番号をユーザーの連絡先リストの連絡先と照合します。以下のコードを使用して連絡先名を取得しています。
(以下のコードは連絡先データベースにクエリを実行し、入力された電話番号と一致するものを見つけます)
String getContactDisplayNameByNumber(String number) {
Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
String name = "";
Cursor contactLookup = context.getContentResolver().query(uri, new String[]{
ContactsContract.PhoneLookup.DISPLAY_NAME}, null, null, null);
try {
if (contactLookup != null && contactLookup.moveToNext()) {
name = contactLookup.getString(contactLookup.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
Log.v("ranjapp", "Name is " + name + " Number is " + number);
}
} finally {
if (contactLookup != null) {
contactLookup.close();
}
}
return name;
}
ここでの問題は、電話番号が連絡先リストに「1234567891」として保存され、着信通話から取得された電話番号が「01234567891」(0 のプレフィックス) になることです。着信番号の前に 0 が付けられているため、この番号は連絡先リストの番号と一致しません。
着信番号には国コードがプレフィックスとして付けられ、保存された連絡先にはそれがない可能性もあります。
これらのシナリオでどのように一致させることができますか?
(私は知ってPhoneNumberUtils.compare()
いますが、言及されたコードに適用することはできません)。