2012-01-03 3 views
0

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

//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, что я нашел в телефонном поиска, чтобы увидеть, какие группы, contacID принадлежит. В результате нет группы, хотя контакт добавляется к группе в моих контактах.

Любые идеи? :)

+0

только предложение: вы определенно хотите использовать ContentProviders здесь. Они разработаны специально для безопасного и атомарного доступа к этой информации. Взгляните [здесь] (http://developer.android.com/reference/android/content/ContentProvider.html) для получения дополнительной информации. :) – Codeman

ответ

1

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

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

попробовать с этим кодом

//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();