Как я могу обновить содержимое записи в журнале вызовов?

Я хотел бы обновить CallLog.Calls.TYPE поле первой записи в Android Call Log от MISSED в INCOMING, Я читал книги, разработчики ссылаются на них и погуглил до смерти, и я достаточно уверен, что мой код верен. Тем не менее, когда я действительно звоню update()В результате ни одна запись не обновляется. Мой пример кода ниже.

Прежде чем спросить:
- У меня есть разрешения на WRITE_CONTACTS
- Запись для обновления (0) существует
- Я пробовал это на DroidX (Verizon) и Samsung Galaxy (AT&T) - Я пробовал различные другие, более длинные формы этого кода с тем же результатом

Может кто-нибудь, пожалуйста, помогите с этим?

    ContentValues newValues = new ContentValues();
    newValues.put(CallLog.Calls.TYPE, CallLog.Calls.INCOMING_TYPE);
    newValues.put(CallLog.Calls.DURATION, 50);
    int result = OsmoService.context.getContentResolver().update(
    ContentUris.withAppendedId(CallLog.Calls.CONTENT_URI, 0), 
    newValues,null,null);

3 ответа

ContentValues cv = new ContentValues();
cv.put(CallLog.Calls.NUMBER,"7070770"); // contact number

cv.put(CallLog.Calls.TYPE,1); // type

cv.put(CallLog.Calls.DURATION, 120); // duration in second


getContentResolver().insert(CallLog.CONTENT_URI, cv);

Если вы обновите свой код выше и замените строку:

ContentUris.withAppendedId(CallLog.Calls.CONTENT_URI, 0)

с этой строкой:

Uri.parse("content://call_log/calls")

Оно работает. Я не знаю почему, но что-то не так с URI контента.

пример:

ContentValues newValues = new ContentValues();
newValues.put(CallLog.Calls.TYPE, CallLog.Calls.INCOMING_TYPE);
newValues.put(CallLog.Calls.DURATION, 50);
int result = OsmoService.context.getContentResolver().update(
    Uri.parse("content://call_log/calls"), 
    newValues,
    null,
    null);

Например CallLog.Calls.CACHED_NAME

private void updateCachedName(int id, @NonNull String name) {

    ContentValues contentValues = new ContentValues();
    contentValues.put(CallLog.Calls.CACHED_NAME, name);

    if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_CALL_LOG) == PackageManager.PERMISSION_GRANTED) {

        getContext().getContentResolver().update(CallLog.Calls.CONTENT_URI, contentValues, CallLog.Calls._ID + "=" + id, null);
    }
}
Другие вопросы по тегам