如何强制刷新CallLog.Calls.CACHED_NAME列?

csb*_*sbg 2 android caching calllog

我的目标是从通话记录中收集所有未知的电话号码.这可以通过以下代码实现:

private static final String[] CALLOG_PROJECTION = {CallLog.Calls._ID,
        CallLog.Calls.CACHED_NAME, CallLog.Calls.NUMBER};
private static final String CALLOG_WHERE = CallLog.Calls.CACHED_NAME + " is null";

Cursor c = getContentResolver().query(CallLog.Calls.CONTENT_URI, CALLOG_PROJECTION,
        CALLOG_WHERE, null, CallLog.Calls.DATE + " DESC");
Run Code Online (Sandbox Code Playgroud)

这很有效,但在我创建了一个来自未知号码的联系人后,查询结果仍然包含未知号码.

如果我打开"呼叫记录"活动窗口,我可以看到数字在几秒钟内更改为联系人姓名.因此,该活动会刷新CACHED_NAME列.

我的问题是,我如何以编程方式刷新(实现)呼叫记录?

ric*_*ogo 6

我找到了这个问题,寻找优化你想要做的事情的方法.我没有使用cached_name,而是查询了电话内容提供商的每个号码以获取实际名称,但这导致了性能问题.

我注意到库存应用程序在发生更改时刷新列表,就像您一样.

我将在Phones表上实现ContentObserver并在发生这种情况时更新我的​​名字,如果有效,我会发布.


编辑

我正在检查(Google的)联系人应用源代码,他们基本上首先显示列表与CACHED_NAME,然后在显示列表后,他们检查(在后台)联系人详细信息是否有任何更改.如果有,它们会更新CallLog记录和列表.

基本上,我已经实现了类似的东西,它的工作原理.当您在检查后台进行更改时滚动列表时会出现一些性能问题,因为在CallLog中有很多重复的数字.所以基本上你只需要验证这些数字是否已经被检出.

希望能帮助到你!