Журнал вызовов.Вызовы.CACHED_PHOTO_URI всегда возвращает пустой

#android #android-contentprovider #android-contentresolver #calllog #android-dialer

#Android #android-contentprovider #android-contentresolver #журнал вызовов #android-дозвонщик

Вопрос:

Я столкнулся с очень важной проблемой. Я разрабатываю приложения, связанные с журналом вызовов, но когда я получаю журнал вызовов от контент-провайдера, я не могу найти журнал вызовов.Вызовы.CACHED_PHOTO_URI. Он всегда возвращает пустой. Я использую VIVO 1917 (Funtouch OS_10)

  public static void loadData(Context context) {
    mainList = new ArrayList<>();
    
    String projection[] = {"_id", CallLog.Calls.NUMBER, CallLog.Calls.DATE, CallLog.Calls.DURATION, CallLog.Calls.CACHED_PHOTO_URI, CallLog.Calls.TYPE, CallLog.Calls.CACHED_NAME};
    ContentResolver contentResolver = context.getApplicationContext().getContentResolver();
    Cursor cursor = contentResolver.query(CallLog.Calls.CONTENT_URI, projection, null, null, CallLog.Calls.DEFAULT_SORT_ORDER);

    if (cursor == null) {
        Log.d("CALLLOG", "cursor is null");
        return;
    }

    if (cursor.getCount() == 0) {
        Log.d("CALLLOG", "cursor size is 0");
        return;
    }

    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        CallLogInfo callLogInfo = new CallLogInfo();
        callLogInfo.setName(cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME)));
        callLogInfo.setNumber(cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER)));
        callLogInfo.setCallType(cursor.getString(cursor.getColumnIndex(CallLog.Calls.TYPE)));
        callLogInfo.setDate(cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)));
        callLogInfo.setDuration(cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DURATION)));
        String ss = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_PHOTO_URI));

        Log.e("TAG", "  recent calls "   ss);
        mainList.add(callLogInfo);
        cursor.moveToNext();
    }

    
    cursor.close();
}
 

Ответ №1:

Документация от Android:

CACHED_PHOTO_URI добавлен на уровне API 23

URI кэшированной фотографии изображения, связанного с номером телефона, если он существует.

Это значение обычно заполняется приложением дозвона для целей кэширования, поэтому его присутствие не гарантируется, и оно может быть не актуальным, если контактная информация, связанная с этим номером, изменилась.

Это означает, что в зависимости от приложения дозвона, которое отличается от производителей, это значение может отсутствовать.

У вас может быть больше шансов, если вы сами посмотрите номер / имя в контактах и получите изображение таким образом.

Комментарии:

1. это означает, что я фильтрую недавний вызов с контактами и получаю uri изображения?

2. @Samset да, вы, вероятно, могли бы использовать это github.com/tamir7/Contacts чтобы сделать это немного проще, так как api контактов кажется немного сложным

3. спасибо @JensV. У меня есть еще одна проблема, можете ли вы мне помочь, если возможно, я интегрирую код конференц-связи, но in VIVO incallService не работает для конференц-связи. Все остальные устройства работают нормально.

4. @Samset это отдельный вопрос. Тот, с которым я все равно не могу вам помочь

5. ПРИМЕЧАНИЕ: на Xaiomi вы должны получить изображение от контакта