如何获取特定组的电话号码

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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,因为它提供了非常丰富的信息。

以上是关于如何获取特定组的电话号码的主要内容,如果未能解决你的问题,请参考以下文章

如何从电话簿中获取与 android 中特定联系人相关联的所有社交帐户?

如何使用联系人 ID 获取特定的联系电话

如何从android中的给定电话号码获取电话号码类型标签

如何从纬度和经度获取电话号码 [关闭]

如何获取具有特定 LOOKUP_KEY 的联系人的所有原始联系人?

如何导入特定联系人的电话号码?