获取联系人的群组?

时间:2012-12-31 04:54:05

标签: android

我正在尝试将联系人多对多地映射到群组。

例如,如果我有:

  • 用户1,属于组701,702,704
  • 用户2,不属于任何群组
  • 用户3,属于组702

我希望得到一个看起来像这样的关系:

userID | groupID
1      | 701
1      | 702
1      | 704
3      | 702

我试过这个:

Cursor cursor = contentResolver.query(ContactsContract.Data.CONTENT_URI, null, new String[] {
    ContactsContract.CommonDataKinds.GroupMembership.CONTACT_ID,
    ContactsContract.CommonDataKinds.GroupMembership.GROUP_SOURCE_ID
}, null, null, null);

但这不太有用。 GROUP_SOURCE_ID列返回不是任何组ID的奇怪数字。有时甚至会返回0或负数。

我可以通过浏览每个组来构建这个映射,然后找到该组中的所有联系人,但这会需要很多查询,而我正试图保持快速(显然,只是那些少数查询是相当的慢!)。

有谁能告诉我如何在一个查询中获得这种联系人到组的映射?

谢谢!

2 个答案:

答案 0 :(得分:12)

    Cursor dataCursor = getContentResolver().query(
            ContactsContract.Data.CONTENT_URI,
            new String[]{
                    ContactsContract.Data.CONTACT_ID,
                    ContactsContract.Data.DATA1
            },
            ContactsContract.Data.MIMETYPE + "=?",
            new String[]{ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE}, null
    );

通过使用此dataCursor,您将获得联系人数据库中所有联系人的contact_idgroup_id

    Cursor groupCursor = getContentResolver().query(
            ContactsContract.Groups.CONTENT_URI,
            new String[]{
                    ContactsContract.Groups._ID,
                    ContactsContract.Groups.TITLE
            }, null, null, null
    );

使用此groupCursor,您将获得联系人数据库中所有群组的group_idgroup_title

因此,如果您希望获得与contact_id相关联的所有组,则首先使用合适的select语句获取dataCursor。使用dataCursor,您可以获得与该group_id相关联的所有contact_id。现在使用groupCursor,您可以获得与该特定联系人相关联的所有组的信息。

答案 1 :(得分:0)

 awk 'NR==FNR{a[$1]=$2;next}$2 in a{$2=a[$2]}1' <(echo "$var2") <(echo "$var1")