Не удается получить группу истинного контакта с устройства Android?

Я пытался получить всю группу с Android-устройства с кодом ниже. Затем я помещаю все имя группы и идентификатор в 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();

Это результат

Некоторые группы имеют разные идентификаторы, но одинаковые имена. Я не знаю почему? Любая помощь приветствуется! Спасибо!

1 ответ

У меня была та же проблема, и я решил ее, выбрав, где 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  ";
Другие вопросы по тегам