Как я могу обновить содержимое записи в журнале вызовов?
Я хотел бы обновить 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);
}
}