编辑通话记录名称

时间:2019-04-17 14:01:30

标签: android android-contacts android-syncadapter calllog android-account

我已经实现了一个联系人应用程序,希望我的应用程序的联系人姓名显示在设备的通话记录历史记录中(电话应用程序),以防我接收/拨打这些电话号码。我该如何实现?

2 个答案:

答案 0 :(得分:1)

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

通常,在大多数电话/呼叫日志应用中,当您打开呼叫日志时,它将显示呼叫列表以及存储在Calls表中的缓存名称,然后启动后台服务刷新缓存的名称,为最近保存为联系人的号码添加名称,或更新最近更改的名称。

因此,如果您的应用程序从呼叫日志中存储了一些号码作为联系人,那么如果您启动呼叫日志应用程序,您应该会在一两秒钟内看到更新的名称。

如果您要以编程方式在代码中存储该名称,则可以轻松做到这一点:

String someNumber = "+12125551234";
String aName = "Jane Addams";
int numberType = Phone.TYPE_MOBILE; // see https://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Phone#column-aliases

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

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

答案 1 :(得分:0)

谢谢@PedroHawk。我在您提供的link中找到了答案。更具体地说,我将在“设备帐户”中创建应用程序的Account,然后使用SyncAdapter将联系人数据从网络服务同步到设备的ContactsProvider