寻找 Telephony.Sms 和 CallLog.Calls 之间的通用联系人 ID

Posted

技术标签:

【中文标题】寻找 Telephony.Sms 和 CallLog.Calls 之间的通用联系人 ID【英文标题】:Looking for a common Contact ID between Telephony.Sms and CallLog.Calls 【发布时间】:2015-09-09 00:34:45 【问题描述】:

目标:我正在尝试将来自相同(已知)联系人的短信和电话分组。

我使用Telephony.Sms.Inbox.CONTENT_URITelephone.Sms.Sent.CONTENT_URI 阅读短信。 我使用CallLog.Calls.CONTENT_UTI 读取呼叫。

我通过关注android is CallLog.Calls._ID the same with the contact id?获取联系人的ID:使用Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, phoneNumber)

现在,有了这个PhoneLookup._ID,我想列出该联系人的短信。

遗憾的是,Telephony.Sms.PERSON 似乎没有存储相同的联系人 ID。

问题:我如何列出来自 PhoneLookup._ID 的短信,或者如果不可能,我怎样才能实现我想要的:列出来自同一联系人的短信和电话。

PS:Telephony.TextBasedSmsColumns.PERSON 似乎是指已弃用的Contacts.People API...

【问题讨论】:

【参考方案1】:

Telephony.Sms.PERSON 实际上匹配 ContactsContract.DataColumns.RAW_CONTACT_ID

所以我用了:

final Cursor cursor = getContentResolver()
    .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
        projection, selection, null, null);

阅读ContactsContract.DataColumns.RAW_CONTACT_ID

https://developer.android.com/reference/android/provider/ContactsContract.DataColumns.html#RAW_CONTACT_ID

【讨论】:

以上是关于寻找 Telephony.Sms 和 CallLog.Calls 之间的通用联系人 ID的主要内容,如果未能解决你的问题,请参考以下文章

Telephony.Sms.Inbox.PERSON 使用已弃用的 Contacts.People._ID

android.provider.Telephony.SMS_RECEIVED 的广播者权限

如何使用 Telephony.Sms 仅检索每个对话的最后一条消息,包括锁定的消息?

Android,在服务当前不可用时使用 Telephony.SMS_RECEIVED 操作接收广播

特定号码的SMS消息未显示在其他Android设备上

在 Android 4.4.2 上更改 SMS 应用默认值