技术开发 频道

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

  【IT168 技术】要删除某一个分组,其实对于Android,比我们想象中的要简单许多。在这里只是简单的说一下用法。

  在操作联系人的ContactsProvider2源码中,

  protected int deleteInTransaction(Uri uri, String selection, String[] selectionArgs) {

  if (VERBOSE_LOGGING) {

  Log.v(TAG, "deleteInTransaction: "; + uri);

  }

  flushTransactionalChanges();

  final boolean callerIsSyncAdapter =

  readBooleanQueryParameter(uri, ContactsContract.CALLER_IS_SYNCADAPTER, false);

  final int match = sUriMatcher.match(uri);

  switch (match) {

  ......

  ......

  case GROUPS_ID: {

  mSyncToNetwork |= !callerIsSyncAdapter;

  return deleteGroup(uri, ContentUris.parseId(uri), callerIsSyncAdapter);

  }

  case GROUPS: {

  int numDeletes = 0;

  Cursor c = mDb.query(Tables.GROUPS, new String[]{Groups._ID},

  appendAccountToSelection(uri, selection), selectionArgs, null, null, null);

  try {

  while (c.moveToNext()) {

  numDeletes += deleteGroup(uri, c.getLong(0), callerIsSyncAdapter);

  }

  } finally {

  c.close();

  }

  if (numDeletes > 0) {

  mSyncToNetwork |= !callerIsSyncAdapter;

  }

  return numDeletes;

  }

  default: {

  mSyncToNetwork = true;

  return mLegacyApiSupport.delete(uri, selection, selectionArgs);

  }

  }

  }

  我们可以看到删除分组的地方是方法deleteGroup(uri, ContentUris.parseId(uri), callerIsSyncAdapter);其中uri就是我们要操作的uri,这里组是 ContactsContract.Groups.CONTENT_URI,ContentUris.parseId(uri)是要删除的分组id,而 callerIsSyncAdapter则表示是否是直接删除Groups表的数据,还是标记该分组的deleted和dirty字段为1来表示已删除 (实际删除是在同步联系人的时候进行的)。

  deleteGroup方法源代码

0
相关文章