时间:2011-01-14 21:49:34

标签: java android android-intent phone-call calllog

我能够以编程方式在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);

2 个答案:

答案 0 :(得分:2)

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

就HTC设备未使用现有照片更新通话记录而言,它可能与HTC Sense缓存呼叫日志条目的方式有关;我见过类似的问题,只出现在Sense设备上。

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

例如,如果我使用带有股票Sense 5.0的HTC EVO LTE向我保存为“Jenny Smith”的人发出呼叫,则会在calls表中创建一个条目,其中包含{name表1}} field - 存储Jenny Smith的地方。如果我将她的联系信息更新为“Jenny Jones”并向她发出新呼叫,则新条目将存储在名为Jenny Jones的calls表中,但之前的条目不会更改。实际的“呼叫历史记录”屏幕将所有呼叫显示为Jenny Jones,但数据库本身具有旧名称。

我查看过的其他设备(包括Nexus 5)会在查看“呼叫记录”时更新calls表中的上一个条目。您的摩托罗拉设备可能会像Nexus 5一样,根据需要刷新数据。

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

答案 1 :(得分:1)

唯一合理的做法(无论如何对我来说)是直接在手机上添加联系人,然后添加指向该联系人的通话记录,之后您可以从手机中删除该联系人。唯一的问题是如果您的应用程序在删除联系人之前被杀死,那么您必须在下次应用程序启动时实施某种清理。应该是一项简单的任务,这一切都非常混乱。