【问题标题】:how to get phone numbers for particular group如何获取特定组的电话号码
【发布时间】:2012-01-28 08:25:33
【问题描述】:

我正在处理 Android 联系人。我想从特定组名中查询电话号码(不是联系人姓名)。为了做到这一点,我应该执行什么查询?

【问题讨论】:

    标签: android contactscontract phone-number


    【解决方案1】:
    Cursor c = context.getContentResolver().query(ContactsContract.Data.CONTENT_URI
    , null, ContactsContract.Data.MIMETYPE+"=?"
    , new String[]{ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE}
    , null);
    

    然后遍历游标并获取您想要的数据。这将返回显示联系人 ID 和组 ID 和其他信息的数据块。然后查询 ContactsContract.Groups 并获取有关要比较的组的数据。

    如果您正在查找有关组行 ID 的组第一次查询的特定数据,则可以将其添加到以下游标中,如下所示...

    Cursor c = context.getContentResolver().query(ContactsContract.Data.CONTENT_URI
    , null, ContactsContract.Data.MIMETYPE+"=? AND "+ ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID+"=?"
    , new String[]{ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE, rowID }
    , null);
    

    在这里写代码,很抱歉犯了愚蠢的错误

    你可以像这样找到组 id...

    Cursor c = context.getContentResolver().query(ContactsContract.Groups.CONTENT_URI, new String[]{ContactsContract.Groups._ID}, ContactsContract.Groups.TITLE+"=?","myGroup", null);
    

    【讨论】:

    • 感谢您的回答。我已经尝试了上面的查询,并且使用 c.getString(c.getColumnIndex(Data.DISPLAY_NAME)) 成功获得了给定组的联系人姓名。但是当我使用 c.getString(c.columnIndex(CommonDataKinds.Phone.NUMBER)) 获取电话号码时,光标似乎返回组行 ID,而不是电话号码。这很奇怪......
    • 那是因为电话号码存储在不同的数据块/mimetype 下,并且您似乎正试图在与组相同的 mimetype 下搜索它们。您需要进行单独的查询并搜索 Phone.CONTENT_ITEM_TYPE mimetype,或者您可以进行一次查询并检查哪个 mimetype 是并正确处理。如果这看起来令人困惑,那么您真的应该阅读此页面developer.android.com/resources/articles/contacts.html,因为它提供了非常丰富的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 2015-07-22
    相关资源
    最近更新 更多