【问题标题】:How to query ContactsContract.CommonDataKinds.Phone on Android?如何在 Android 上查询 ContactsContract.CommonDataKinds.Phone?
【发布时间】:2010-08-15 07:29:39
【问题描述】:

我正在尝试为 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 处理的教程吗?

【问题讨论】:

    标签: android sms phone-number


    【解决方案1】:

    你应该看看推荐的ContactsContract.PhoneLookup提供者

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

    Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
    resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME,...
    

    【讨论】:

    • 你能提供完整的例子吗
    猜你喜欢
    • 2016-09-07
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多