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

同じ問題があり、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 に答える