Получение группы определенного контакта

Я хочу получить контактные данные вместе с группой, к которой они принадлежат. Я получил код, чтобы перечислить все группы контактов в телефоне.

Cursor groupC = getContentResolver().query(
    ContactsContract.Groups.CONTENT_URI, null, null, null, null); 

while (groupC.moveToNext()) { 
    String groupid =
        groupC.getString(groupC.getColumnIndex(ContactsContract.Groups._ID));
    Log.e("myTag", groupid); 
    String grouptitle =
        groupC .getString(groupC.getColumnIndex(ContactsContract.Groups.TITLE));
    Log.e("myTag", grouptitle);
}
groupC.close();

Затем я попытался запросить конкретный контакт, используя его идентификатор, но он всегда показывает There is no such column....

Cursor groupC = getContentResolver().query(
    ContactsContract.Groups.CONTENT_URI,
    null,
    ContactsContract.Contacts._ID+"= ?",
    new String[]{id},
    null);

где идентификатор

Cursor cur = cr.query(
    ContactsContract.Contacts.CONTENT_URI,
    null,
    null,
    null,
    null);
id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));

Как запросить группу, используя определенный идентификатор контакта?


person adithi    schedule 24.05.2011    source источник


Ответы (1)


Я нашел ответ. Мы должны передать необработанный идентификатор контакта и правильный тип пантомимы.

  String where = ContactsContract.Data.RAW_CONTACT_ID
            + "="
            + Integer.parseInt(id)
            + " AND "
            + ContactsContract.Data.MIMETYPE
            + "='"
            + ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE
            + "'";

    Cursor cursor = ctx
            .getContentResolver()
            .query(ContactsContract.Data.CONTENT_URI, null, where, null,
                    null);
    startManagingCursor(cursor);
    Log.e("Count is:", ""+ cursor.getCount());
    while (cursor.moveToNext()) {
        groupid = cursor
                .getString(cursor.getColumnIndex(ContactsContract.Data.DATA1));
        Log.e("groupid", groupid);
        builder.append(groupid);

    }String where = ContactsContract.Data.RAW_CONTACT_ID
            + "="
            + Integer.parseInt(id)
            + " AND "
            + ContactsContract.Data.MIMETYPE
            + "='"
            + ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE
            + "'";

    Cursor cursor = ctx
            .getContentResolver()
            .query(ContactsContract.Data.CONTENT_URI, null, where, null,
                    null);
    startManagingCursor(cursor);
    Log.e("Count is:", ""+ cursor.getCount());
    while (cursor.moveToNext()) {
        groupid = cursor
                .getString(cursor.getColumnIndex(ContactsContract.Data.DATA1));
        Log.e("groupid", groupid);
        break;
    }

Контакт может быть более чем в одной группе, здесь он только возвращает свою первую группу.

Думаю, это может быть кому-то полезно...

person adithi    schedule 02.06.2011
comment
это должно быть сделано таким образом, потому что GroupMembership не имеет URI, только тип MIME. Почему Google решил, что это хорошо?? - person Someone Somewhere; 14.08.2012