2011-12-14 166 views
1

我想从定义的组中删除所有联系人,但我不知道如何从联系人表和组表中进行联接(如果可能的话)。删除组中的所有联系人

ContentResolver cr = getContentResolver(); 
String where = ContactsContract.Groups.TITLE + " =='LolGroup'"; 

Cursor cursor = cr.query(
    ContactsContract.Contacts.CONTENT_URI, null, where, null, null); 
while (cursor.moveToNext()) { 
    String lookupKey = cursor.getString(
      cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)); 
    Uri uri = Uri.withAppendedPath(
     ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey); 
    cr.delete(uri, null, null); 
} 

当然,它给了我一个错误,因为没有“标题”联系人组,但如果我做一个与ID加入我应该得到我想要的东西。

任何想法如何做到这一点?

回答

0

它看起来很奇怪,因为ContactsContract.Contacts没有ContactsContract.Groups.TITLE列。所以我认为你可以用你想要的组标题获得组ID,然后用组ID来搜索联系人。这个想法可能会像下面这样:

public String getGroupIdByTitle(String groupTitle){ 
     try { 
      cursor = mContentResolver.query(
       ContactsContract.Groups.CONTENT_URI, 
        new String[] {Groups._ID}, 
        Groups.TITLE + "=?", 
        new String[]{groupTitle}, 
        null); 

        while (cursor.moveToNext()){ 
         return cursor.getString(cursor.getColumnIndex(0); 
        } 

     } finally { 
      if (cursor!=null) cursor.close(); 
     } 

     return ""; 
    } 

    public String getGroupIdOfContact(String lookupKey) { 

    String where = String.format("%s=? AND %s=?", Data.LOOKUP_KEY, Data.MIMETYPE); 
    String[] whereArgs = {lookupKey, GroupMembership.CONTENT_ITEM_TYPE}; 

    String groupRowId = ""; 
     Cursor cursor = mContentResolver.query(
       Data.CONTENT_URI, 
       new String[]{GroupMembership.GROUP_ROW_ID}, 
       where, whereArgs, null); 
     try { 
      if (cursor.moveToNext()) { 
       return cursor.getString(cursor.getColumnIndex(GroupMembership.GROUP_ROW_ID)); 
      } 

     } finally { 
      if (cursor!=null) cursor.close(); 
     } 

return ""; 
    } 

    public void deleteContactByGroupTitle(String groupTitle) { 

     String targetGroupId = getGroupIdByTitle(groupTitle); 

     Cursor cursor = null; 
     try { 
      cursor = mContentResolver.query(Contacts.CONTENT_URI, null, null, null, null); 

      while (cursor.moveToNext()){ 
      String lookupKey = cursor.getString(cursor.getColumnIndex(Contacts.LOOKUP_KEY)); 
       String groupId = getGroupIdOfContact(lookupKey); 
       if (targetGroupId.equals(groupId)){ 
         //TODO. delete this contact 
       } 
      } 

     } finally { 
      if (cursor!=null) cursor.close(); 
     } 

    } 

上面的代码没有测试过,但我认为基本的想法是一样的。

相关问题