Можно получить идентификатор с полученного номера телефона, но не группы - PullRequest
0 голосов
/ 03 января 2012

Мне удалось получить идентификатор и имя по номеру телефона, по которому осуществляется вызов. Я хотел бы узнать, к каким группам принадлежит этот идентификатор.Я пробовал следующее:

    //Search for the information about the phone number, save the goupID(s)
    Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(aNumber)); 
    ContentResolver cr = mService.getContentResolver();
    Cursor myCursor = cr.query(uri, new String[]{PhoneLookup._ID, PhoneLookup.DISPLAY_NAME},null, null, null);

    myCursor.moveToFirst();
    //String contactID = myCursor.getString(myCursor.getColumnIndex(PhoneLookup._ID)); 
    String contactID = myCursor.getString(myCursor.getColumnIndex(ContactsContract.Contacts._ID)); 
    myCursor.close();

    //Use the cursor to query for group with help of ID from the Phone look up
    myCursor = cr.query(ContactsContract.Groups.CONTENT_URI,
            new String[]{ContactsContract.Groups._ID},
            ContactsContract.Groups._ID + " = ?",
            new String[]{contactID}, 
            null);      

    //Contact may be in more than one group
    nbrOfGroups = myCursor.getCount(); 
    groupName = new String [nbrOfGroups];

Проблема заключается во втором запросе, где я хотел бы использовать contactID, который я нашел в поиске телефона, чтобы увидеть, к каким группам принадлежит этот contactCID.Результатом является отсутствие группы, хотя контакт добавлен в группу в моих контактах.

Есть идеи?:)

1 Ответ

1 голос
/ 15 января 2012

Groups._ID не совпадает с Contact ID, это индекс таблицы, в которой хранится вся информация о группе.После получения идентификатора контакта вы должны получить все членство в группе для этого контакта из таблицы данных, используя mimetype членства в группе.

После получения идентификаторов групп вы можете запросить таблицу Groups, чтобы получить TITLE для всехгруппы

попробуйте с этим кодом

    //Search for the information about the phone number, save the goupID(s)
    Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode("123123")); 
    ContentResolver cr = this.getContentResolver();
    Cursor myCursor = cr.query(uri, new String[]{PhoneLookup._ID, PhoneLookup.DISPLAY_NAME},null, null, null);

    myCursor.moveToFirst();
    //String contactID = myCursor.getString(myCursor.getColumnIndex(PhoneLookup._ID)); 
    String contactID = myCursor.getString(myCursor.getColumnIndex(ContactsContract.Contacts._ID)); 
    myCursor.close();

    //Use the cursor to query for group with help of contact ID from the Phone look up
    myCursor = cr.query(ContactsContract.Data.CONTENT_URI,
            new String[]{ContactsContract.Data.CONTACT_ID, 
            ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID},
            ContactsContract.Data.CONTACT_ID + " = ? " + 
            Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE + "'",
            new String[]{contactID}, 
            null);      

    //Contact may be in more than one group
    int nbrOfGroups = myCursor.getCount();
    int[] groupIds = new int[nbrOfGroups];
    int index = 0;

    // unfortunately group names are stored in Groups table
    // so we need to query again
    if (myCursor.moveToFirst()) {
        do {
            groupIds[index] = myCursor.getInt(1); // Group_row_id column
        } while (myCursor.moveToNext());
    }

    myCursor.close();

    // construct the selection
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < nbrOfGroups; i++) {
        if (i != 0) {
            sb.append(",");
        }

        sb.append(groupIds[i]);
    }

    String[] groupName = new String [nbrOfGroups];
    myCursor = cr.query(ContactsContract.Groups.CONTENT_URI,
            new String[]{ContactsContract.Groups.TITLE},
            ContactsContract.Groups._ID + " IN (" + sb.toString() + ")",
            null, null);

    // finally got the names
    if (myCursor.moveToFirst()) {
        do {
            groupName[index] = myCursor.getString(0); // Group_row_id column
        } while (myCursor.moveToNext());
    }

    myCursor.close();
...