2010-12-07 53 views
2

如何過濾由groupName返回的聯繫人?使用ContactsContract光標按組獲取聯繫人

@Override 
public void onItemSelected(AdapterView<?> parent, View view, int pos, 
     long id) { 
    String groupName = parent.getItemAtPosition(pos).toString(); 
    Log.i(this.toString(), String.format("Show Group: %s", groupName)); 

    Cursor cur = this.getContentResolver().query(
      ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
    if (cur.getCount() > 0) { 
     while (cur.moveToNext()) { 
      String name = cur 
        .getString(cur 
          .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
      if (name != null) { 
       Log.i(this.toString(), String.format("Show: %s", name)); 
      } 
     } 

     cur.close(); 
    } 
} 

回答

2

我能夠通過使用下面的查詢,以濾除組聯繫人:

Cursor c = this.managedQuery(Data.CONTENT_URI, new String[] { 
        Contacts.DISPLAY_NAME, Contacts._ID }, 
        GroupMembership.GROUP_ROW_ID + " = ?", 
        new String[] { groupId }, Phone.TIMES_CONTACTED + " DESC"); 

顯然,你需要知道組ID爲了完成這一點,我這究竟是怎麼被使用的SimpleCursorAdapter到微調W /以下光標:

Cursor c = managedQuery(Groups.CONTENT_URI, 
         new String[] { Groups.SYSTEM_ID, Groups._ID,}, 
         Groups.SYSTEM_ID + " NOT NULL", 
         null, null); 
1

不幸的是只有系統組有SYSTEM_IDs(「具有特殊的意義,以同步適配器組」)。所以這種方法不是防彈的。

2

這對我的作品爲讓所有組ID,而不僅僅是系統ID:

public HashMap<String, Long> fillGroupsHashMap(HashMap<String, Long> groups) // 
{ 

    Cursor tempCur = activity.managedQuery(Groups.CONTENT_URI, 
      new String[] { Groups._ID, Groups.TITLE }, null, null, null); 

    tempCur.moveToFirst(); 
    while (tempCur.moveToNext()) // 
    { 
     groups.put(tempCur.getString(1), tempCur.getLong(0)); 
    } 
    return groups; 
} 
0

我有這個heachache,但最後我得到這個與WHIS代碼的工作,現在我可以只篩選電話號碼,避免重複和未使用的羣組:

String[] GROUP_PROJECTION = new String[] { 
    ContactsContract.Groups._ID, ContactsContract.Groups.TITLE,ContactsContract.Groups.SUMMARY_COUNT ,ContactsContract.Groups.SUMMARY_WITH_PHONES }; 
    Cursor c = context.getApplicationContext().getContentResolver().query(
       ContactsContract.Groups.CONTENT_SUMMARY_URI, 
       GROUP_PROJECTION, 
       ContactsContract.Groups.SUMMARY_WITH_PHONES +"> 0" 
      , null, ContactsContract.Groups.TITLE + " ASC");