Получение 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);
Другие вопросы по тегам