0

我尝试使用以下代码从 android 设备获取所有组。然后我将所有组名和 id 放在 arraylist 中。

Uri CONTENT_URI = ContactsContract.Groups.CONTENT_URI;
            String GR_ID = ContactsContract.Groups._ID;
            String GR_TITLE = ContactsContract.Groups.TITLE;
            ContentResolver cr = getContentResolver();
            Cursor groupCursor = cr.query(CONTENT_URI, null, null, null,
                    ContactsContract.Groups._ID + " ASC");
            while (groupCursor.moveToNext()) {
                String group_id = groupCursor.getString(groupCursor.getColumnIndex(GR_ID));
                String group_name = groupCursor.getString(groupCursor.getColumnIndex(GR_TITLE));

                Group grp = new Group(group_name);
                grp.setId(group_id);

                arrayPersonal.add(grp);
            }
            groupCursor.close();

这是结果 在此处输入图像描述

某些组具有不同的 ID 但名称相同。我不知道为什么?任何帮助将非常感激!谢谢!

4

1 回答 1

1

我遇到了同样的问题,我通过选择 where ContactsContract.Groups.ACCOUNT_TYPE = 'com.google'解决了这个问题

我遇到这个是因为我查询了 ACCOUNT_TYPE 列以查看它包含的内容,其中一些条目是“com.google”,而其他条目是“DeviceOnly”。我的组查询有一些其他限制,取自内部 Android 库 ( GrepCode ),因此使用它们似乎是明智的。这是我的整个选择声明(针对 CursorLoader)

    private static final String CONTACT_GROUP_SELECTION = ContactsContract.Groups.AUTO_ADD + " = 0 "
        + " AND " + ContactsContract.Groups.ACCOUNT_TYPE + " = 'com.google' "
        + " AND " + ContactsContract.Groups.ACCOUNT_NAME + " NOT NULL  "
        + " AND " + ContactsContract.Groups.FAVORITES + " = 0 "
        + " AND " + ContactsContract.Groups.DELETED + " = 0  ";
于 2014-07-24T03:29:19.007 回答