2012-01-26 8 views
0

アンドロイドの連絡先で特定のグループのメンバーを取得する必要があります。質問指定したグループのメンバーに問い合わせますか?

私はコンタクトグループ名とそのIDの

を持っている誰もが、特定のグループ内のメンバーの連絡先プロバイダを照会する方法を私に提供することはできますか?

答えて

4

は、この方法を試してみてください:

private Cursor getContacts(String groupID) { 
    Uri uri = ContactsContract.Data.CONTENT_URI; 

    String[] projection = new String[] { 
     ContactsContract.Contacts._ID, 
     ContactsContract.Data.CONTACT_ID, 
     ContactsContract.Data.DISPLAY_NAME 
    }; 

    String selection = null; 
    String[] selectionArgs = null; 

    if(groupID != null && !"".equals(groupID)) { 
     selection = ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID 
        + " = ?"; 
     selectionArgs = new String[] { groupID }; 
    } 
    else 
     selection = "1) GROUP BY (" + ContactsContract.Data.CONTACT_ID; 

     String sortOrder = ContactsContract.Contacts.DISPLAY_NAME 
          + " COLLATE LOCALIZED ASC "; 

     return getContentResolver().query(uri, projection, 
             selection, selectionArgs, sortOrder); 
} 

これは、Android 2.3.3と下位に動作しますが、Androidの4+と私では動作しませんが、現在、理由を知りません。

UPD。 SQLクエリに

追加カスタム文字列パラメータ「GROUP BYは、」アンドロイド4+に拒否されたので、私はこの回避策に設立しました:

private Cursor getContacts(String groupID) { 
    Uri uri = ContactsContract.Data.CONTENT_URI; 

    String[] projection = new String[] { 
      ContactsContract.Contacts._ID, 
      ContactsContract.Data.CONTACT_ID, 
      ContactsContract.Data.DISPLAY_NAME 
    }; 

    String selection = null; 
    String[] selectionArgs = null; 

    if(groupID != null && !"".equals(groupID)) { 
     selection = ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID 
         + " = ?"; 
     selectionArgs = new String[] { groupID }; 
    } 

    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME 
         + " COLLATE LOCALIZED ASC "; 

    Cursor cursor = getContentResolver().query(uri, projection, 
              selection, selectionArgs, sortOrder); 

    MatrixCursor result = new MatrixCursor(projection); 
    Set<Long> seen = new HashSet<Long>(); 
    while (cursor.moveToNext()) { 
     long raw = cursor.getLong(1); 
     if (!seen.contains(raw)) { 
      seen.add(raw); 
      result.addRow(new Object[] { cursor.getLong(0), 
          cursor.getLong(1), cursor.getString(2) }); 
     } 
    } 

    return result; 
関連する問題