如何以编程方式插入带有显示名称和照片的呼叫日志条目?

dch*_*lle 12 java android calllog phone-call android-intent

我能够以编程方式在Android调用日志中插入一个条目,其中包含数字,日期,持续时间和类型但我无法弄清楚如何同时包含照片,标签和名称?我添加的条目是针对具有完全相同编号的现有联系人.我注意到在摩托罗拉设备上,如果该号码与现有联系人相匹配,则显示名称和图片,但在我的HTC Incredible上缺少某些内容?

我做了以下..(不知道甚至尝试什么照片)

ContentValues values = new ContentValues();
values.put(CallLog.Calls.NUMBER, number);
values.put(CallLog.Calls.CACHED_NAME, name);
values.put(CallLog.Calls.CACHED_NUMBER_LABEL, label);
values.put(CallLog.Calls.DATE, date);
values.put(CallLog.Calls.DURATION, duration);
values.put(CallLog.Calls.TYPE, myCallType);
context.getContentResolver().insert(CallLog.Calls.CONTENT_URI, values);
Run Code Online (Sandbox Code Playgroud)

mik*_*e47 3

您无法将照片插入通话记录本身;这些信息存储在链接到通话记录条目的联系人中。有关如何执行此操作的更多信息,请参阅ContactsContract.Data 。

至于 HTC 设备未使用现有照片更新通话记录,这可能与 HTC Sense 缓存通话记录条目的方式有关;我见过仅出现在 Sense 设备上的类似问题。

通话记录条目通常存储在calls联系人应用程序数据库的表中 ( /data/data/com.android.providers.contacts/databases/contacts2.db)。由于某种原因,如果联系人数据发生变化,HTC Sense 似乎不会更新现有的通话记录条目,但其他 ROM 会这样做。

例如,如果我使用配备 Stock Sense 5.0 的 HTC EVO LTE 向我保存为“Jenny Smith”的人拨打电话,则会在表中创建一个条目,其中calls包含一个name字段,用于存储 Jenny Smith。如果我将她的联系信息更新为“Jenny Jones”并向她拨打新电话,则表中将存储一个calls名为 Jenny Jones 的新条目,但之前的条目不会更改。实际的呼叫历史记录屏幕显示 Jenny Jones 的所有呼叫,但数据库本身具有旧名称。

我测试过的其他设备(包括 Nexus 5)calls在查看呼叫日志时会更新表中的先前条目。您的摩托罗拉设备的行为可能类似于 Nexus 5,根据需要刷新数据。

我不是数据库专家,但对它们有一定的熟悉程度。从数据库结构的角度来看,对我来说,任何特定于联系人的信息都存储在该calls表中似乎很奇怪(它包含一个raw_contacts_id链接到contacts该数据库表中存储所有实际联系信息的同一字段的字段) ,但这就是它的实现方式。