技术开发 频道

Android 程序代码删除联系人分组的方法

  public int deleteGroup(Uri uri, long groupId, boolean callerIsSyncAdapter) {

  mGroupIdCache.clear();

  final long groupMembershipMimetypeId = mDbHelper

  .getMimeTypeId(GroupMembership.CONTENT_ITEM_TYPE);

  mDb.delete(Tables.DATA, DataColumns.MIMETYPE_ID + "="

  + groupMembershipMimetypeId + " AND " + GroupMembership.GROUP_ROW_ID + "=" + groupId, null);

  try {

  if (callerIsSyncAdapter) {

  return mDb.delete(Tables.GROUPS, Groups._ID + "=" + groupId, null);

  } else {

  mValues.clear();

  mValues.put(Groups.DELETED, 1);

  mValues.put(Groups.DIRTY, 1);

  return mDb.update(Tables.GROUPS, mValues, Groups._ID + "=" +groupId, null);

  }

  } finally {

  mVisibleTouched = true;

  }

  }

  可见,我们虽然提供的uri是Groups.CONTENT_URI,实际上android为我们进行了两步操作:

  1.根据我们提供的分组delId,删除Data表中的表示分组关系的那条数据,即Data.MIMETYPE是GroupMemberShip.CONTENT_ITEM_TYPE,data1等于delId的那条数据。这样就删除了联系人与该分组的关系。

  2.如果callerIsSyncAdapter=true,则删除Groups表Groups._ID为delId的数据,这样就删除了该分组;否则,标记改组数据为已删除,数据需要同步,实际删除操作在同步联系人时进行。

  ContentResolver cr = mContext.getContentResolver();

  于是,我们删除一个分组的时候,如果想删除某一分组关系,可以不提供callerIsSyncAdapter参数(默认为false),表示标记删除Groups表对应组数据,删除对应的Data表数据。

  cr.delete(Groups.CONTENT_URI,Groups._ID+"="+groupID,null);

  提供callerIsSyncAdapter参数,表示表示删除Groups表对应组数据,删除对应的Data表数据。

  cr.delete(Uri.parse(ContactsContract.RawContacts.CONTENT_URI.toString() +"?" + ContactsContract.CALLER_IS_SYNCADAPTER+"=true"),Groups._ID+"="+groupID,null)

  如果要删除某一个联系人与某一个分组的关系,根据源代码只需要这样做:

  cr.delete(DATA.CONTENT_URI, Datas.MIMETYPE + "=" +

  GroupMembership.CONTENT_ITEM_TYPE + " AND " +

  GroupMembership.GROUP_ROW_ID + "=" groupId, null);

0
相关文章