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

Я хотел бы обновить поле CallLog.Calls.TYPE первой записи в журнале вызовов Android с 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 ]

1 голос
/ 25 октября 2015
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);
1 голос
/ 26 апреля 2011

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

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);
0 голосов
/ 21 марта 2018

например 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);
    }
}
...