【问题标题】:Query Contact members from a specified group?查询指定组的联系人成员?
【发布时间】:2012-01-26 19:02:06
【问题描述】:

我需要在 android 联系人中获取特定组的成员。

我有联系人组名称和他们的 ID

谁能告诉我如何在联系人提供者中查询特定组中的成员?

【问题讨论】:

    标签: android android-contentprovider android-contacts


    【解决方案1】:

    试试这个方法:

    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。

    在 Android 4+ 中拒绝向 SQL 查询添加自定义字符串参数“GROUP BY”,因此我建立了这个解决方法:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 2012-08-29
      • 1970-01-01
      相关资源
      最近更新 更多