获取联系人的群组?

Ver*_*gon 12 android

我正在尝试将联系人的多对多映射到组.

例如,如果我有:

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

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

userID | groupID
1      | 701
1      | 702
1      | 704
3      | 702
Run Code Online (Sandbox Code Playgroud)

我试过这个:

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);
Run Code Online (Sandbox Code Playgroud)

但这并不是很有效.GROUP_SOURCE_ID列返回不是任何组ID的奇怪数字.有时甚至会返回0或负数.

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

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

谢谢!

Sre*_*n R 13

    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
    );
Run Code Online (Sandbox Code Playgroud)

通过使用此dataCursor您将得到contact_idgroup_id在接触数据库中的所有联系人.

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

通过使用此groupCursor您将得到group_idgroup_title在联系人数据库中的所有群体.

因此,如果您希望获得与第一个相关联的所有组contact_id,请dataCursor使用合适的select语句.使用dataCursor你可以得到所有group_id相关的contact_id.现在使用groupCursor您可以获得与该特定联系人相关的所有组的信息.