1

我正在尝试为 SMS 消息建立一个对话列表。因此,我正在阅读“content://sms/conversations”并阅读每个对话的前几条消息以查找通信伙伴的电话号码。使用这些号码,我尝试从 ContactsContract.CommonDataKinds.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 的文档之外,是否有关于 Android 中的 SMS 处理的教程,关于像这样的周边任务?
4

1 回答 1

2

您应该查看推荐的ContactsContract.PhoneLookup提供程序

表示查找电话号码结果的表格,例如来电显示。要执行查找,您必须将要查找的数字附加到 CONTENT_FILTER_URI。这个查询是高度优化的。

Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME,...
于 2010-08-15T08:29:34.080 回答