如何更新通话记录中条目的内容?

时间:2011-04-12 13:22:14

标签: android calllog

我想将Android通话记录中第一个条目的CallLog.Calls.TYPE字段从MISSED更新为INCOMING。我已经阅读过书籍,开发人员参考并将其搜索到死亡,并且我有理由相信我的代码是正确的。但是,当我实际调用update()时,结果是没有更新记录。我的代码示例如下。

在你问之前:
   - 我拥有WRITE_CONTACTS的权限    - 要更新的记录(0)确实存在    - 我在DroidX(Verizon)和三星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 个答案:

答案 0 :(得分:1)

如果您更新上面的代码并替换以下行:

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);

答案 1 :(得分:1)

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);

答案 2 :(得分:0)

例如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);
    }
}