首页 > 解决方案 > 有没有一种方法可以在 android 编程中获取更改的联系人姓名而不是 CallLogs 中的缓存名称

问题描述

我正在开发一个应用程序来获取通话记录。从 CallLogs 我得到呼叫者的缓存名称。现在,如果我更改联系人列表中的人的姓名。它不会反映在呼叫日志中。如何处理

标签: androidandroid-contactstelephonymanager

解决方案


CallLog.Calls表包含用于缓存名称的字段,因为这些是缓存名称,它们并不总是正确的,并且会不时刷新。

大多数电话/通话记录应用程序将显示通话列表以及存储在Calls表格中的缓存名称,然后启动后台线程以刷新这些缓存的名称列 - 将名称添加到最近保存为联系人的号码,或更新名称最近发生了变化。

因此,如果您更新了联系人的姓名,然后启动通话记录应用程序,您应该会在一两秒内看到更新后的姓名。

如果您想在代码中以编程方式更新缓存的名称,您可以轻松地做到这一点:

String someNumber = "+12125551234"; // this is format-sensitive, so it must be exactly as it appears in the call-log
String aName = "Jane Addams";

final ContentValues values = new ContentValues(2);
values.put(Calls.CACHED_NAME, aName);

// on Lollipop+ device, you can also set Calls.CACHED_LOOKUP_URI and Calls.CACHED_FORMATTED_NUMBER

getContentResolver().update(Calls.CONTENT_URI, values, Calls.NUMBER + "='" + someNumber + "'", null);

推荐阅读