我正在尝试为SMS消息构建对话列表。因此,我正在阅读“ content:// sms/对话”,并阅读每个对话的前几条消息,以查找通信合作伙伴的电话号码。使用这些数字,我尝试从ContactScontract.commondatakinds.s.phone检索Contact_ID,以从联系人数据库中获取该人的其余信息。

String[] returnVals = new String[] {ContactsContract.CommonDataKinds.Phone.CONTACT_ID};
Cursor pCur = thisContent.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
            returnVals, 
            ContactsContract.CommonDataKinds.Phone.DATA1 + " = \"" + phoneNumber + "\"", 
            null, 
            null);

当我旋转此查询的结果时,我会发现尽管将它们存储在触点数据库中,但找不到一些联系人。例如,一个与我的联系人列表之一相关联的数字,位于似乎与破折号一起存储的州。我了解这可能是一个问题,但是从线程中提取的其他数字仍以它们在短信中出现的方式存储,但仍未找到。

所以我的问题是:

  1. 这是正确的方法吗?我想念什么吗?有一个更简单的方法可以实现这一目标吗?
  2. 我将从Contactscontract.commondatakinds.phone中回来的是指人联系人的_id。我想我不能像适当的长期_id一样处理那个,但是我需要如何做到这一点呢?
  3. 除了SDK的文档外,是否还有关于SMS处理的教程?
有帮助吗?

解决方案

您应该看看推荐的 contactscontract.phonelookup 提供者

表示查找电话号码的结果的表,例如,呼叫者ID。要执行查找,必须将要找到的数字附加到content_filter_uri。此查询已高度优化。

Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME,...
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top