Android-9 CallLog: CACHED_NAME и CACHED_PHOTO_URI всегда возвращают NULL из CallLog

У меня было приложение, в котором я извлекал журнал вызовов и список контактов и показывал их в RecyclerView. Все шло нормально до андроида-8. Внезапно я обнаружил, что имена не отображаются на устройстве Android-9. Затем отладка показывает, что CACHED_NAME и CACHED_PHOTO_URI всегда возвращают значение null на andorid-9. Я получаю NUMBER, DURATION и все остальное очень хорошо, только CACHED_NAME и CACHED_PHOTO_URI отсутствуют.

Я проверил журнал изменений Android-9, правильно обработал разрешение журнала вызовов, я прилагаю свои разрешения из манифеста с этим вопросом. Мое приложение также правильно использует разрешения во время выполнения. Я также проверил это в настройках устройства. Кроме того, мое приложение также установлено как приложение для телефона по умолчанию.

<uses-permission android:name="android.permission.RECEIVE_SMS" />

    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
    <uses-permission android:name="android.permission.ANSWER_PHONE_CALLS" />
    <uses-permission android:name="android.permission.CALL_PHONE" />

    <uses-permission android:name="android.permission.READ_CALL_LOG" />
    <uses-permission android:name="android.permission.WRITE_CALL_LOG" />
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />

String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
        String name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME));
        Log.d("tag", "name: " + (name == null ? "null": name));
        String date = cursor.getString(cursor.getColumnIndex(CallLog.Calls.DATE));
        String duration = cursor.getString(cursor.getColumnIndex(CallLog.Calls.DURATION));
        String photoUri = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_PHOTO_URI));

        Log.d("tag", "photoUri: " + (photoUri == null ? "null": photoUri));

        String subscription_id = cursor.getString(cursor.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_ID));
        String subscription_component_name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_COMPONENT_NAME));

Он отлично работает на Android 8 и ниже, может ли кто-нибудь сказать мне, в чем проблема с Android-9?


person Md Tarik Mahmud    schedule 09.04.2019    source источник


Ответы (2)


Пожалуйста, проверьте это, если требуется RuntimePermission для CALL_LOG GROUP. Потому что они внесли некоторые изменения в Android-9

person Cliff    schedule 09.04.2019
comment
Я проверил, и READ_CALL_LOG, WRITE_CALL_LOG, PROCESS_OUTGOING_CALLS — это разрешения из группы CALL_LOG. Я беру все это. - person Md Tarik Mahmud; 09.04.2019

сначала получить контакты из Contacts.Contract, а затем получить имя, фото по номеру телефона или идентификатор контакта из базы данных.

person Surya Pratap    schedule 06.03.2021