我想将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);
答案 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);
}
}