Получение ContactName по номеру телефона
Я создаю деятельность, которая перечисляет последние звонки от пользователя. Требование заключается в том, что когда пользователь получает вызов, phone number
а также contact 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()
но не в состоянии применить это в упомянутом коде).
1 ответ
Проблема заключалась в том, что метод не вызывался с номером телефона в качестве ввода. Это работает независимо от того, как число, то есть с префиксом +91 или 0. Исправил код, как показано ниже:
Bundle bundle = intent.getExtras();
String number = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
String name=getContactDisplayNameByNumber(number);