从android中的特定组中删除联系人

问题描述:

我正在制作android应用程序,我想从特定组中删除联系人不删除联系人只是从组中删除,我有组ID和联系人ID,任何人都可以告诉我查询要做到这一点, 我想实现类似删除contact_id = 1 from group_id = 2从android中的特定组中删除联系人

联系人链接到ContactsContract.CommonDataKinds.GroupMembership记录组。您可以使用这样的事情,从组删除联系人:

private void deleteContactFromGroup(long contactId, long groupId) 
{ 
    ContentResolver cr = getContentResolver(); 
    String where = ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID + "=" + groupId + " AND " 
      + ContactsContract.CommonDataKinds.GroupMembership.RAW_CONTACT_ID + "=?" + " AND " 
      + ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE + "='" 
      + ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE + "'"; 

    for (Long id : getRawContactIdsForContact(contactId)) 
    { 
     try 
     { 
      cr.delete(ContactsContract.Data.CONTENT_URI, where, 
        new String[] { String.valueOf(id) }); 
     } catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

private HashSet<Long> getRawContactIdsForContact(long contactId) 
{ 
    HashSet<Long> ids = new HashSet<Long>(); 

    Cursor cursor = getContentResolver().query(RawContacts.CONTENT_URI, 
       new String[]{RawContacts._ID}, 
       RawContacts.CONTACT_ID + "=?", 
       new String[]{String.valueOf(contactId)}, null); 

    if (cursor != null && cursor.moveToFirst()) 
    { 
     do 
     { 
      ids.add(cursor.getLong(0)); 
     } while (cursor.moveToNext()); 
     cursor.close(); 
    } 

    return ids; 
} 

注意,当您执行删除,您应该指定RAW_CONTACT_ID而不是CONTACT_ID。所以你需要查询指定联系人的所有原始联系人ID。

另外您可能需要考虑帐户数据。在这种情况下,改变查询联络人ID,以类似的东西:

Uri rawContactUri = RawContacts.CONTENT_URI.buildUpon() 
      .appendQueryParameter(RawContacts.ACCOUNT_NAME, accountName) 
      .appendQueryParameter(RawContacts.ACCOUNT_TYPE, accountType).build(); 

Cursor cursor = getContentResolver().query(rawContactUri, 
      new String[] { RawContacts._ID }, RawContacts.CONTACT_ID + "=?", 
      new String[] { String.valueOf(contactId) }, null); 

public static Uri addContactToGroup(String rawContactId,String groupId) 
    { 
     try 
     { 

      ContentValues values = new ContentValues(); 
      values.put(Data.RAW_CONTACT_ID, rawContactId); 
      values.put(GroupMembership.GROUP_ROW_ID, groupId); 
      values.put(Data.MIMETYPE, GroupMembership.CONTENT_ITEM_TYPE); 

      return getContentResolver.insert(Data.CONTENT_URI, values); 
     } 
     catch (Exception e) 
     {} 
     return Uri.EMPTY; 
    } 

// ------------------------- ----------

public static int removeContactFromGroup(String contactId,String groupId) 
{ 
    try 
    { 
     String where = Data.CONTACT_ID + " = ? AND " + Data.MIMETYPE + " = ? AND " + GroupMembership.GROUP_ROW_ID + " = ?"; 
     String[] args = {contactId, GroupMembership.CONTENT_ITEM_TYPE, groupId}; 
     return getContentResolver.delete(Data.CONTENT_URI, where, args); 
    } 
    catch (Exception e) 
    {} 
    return 0; 
}