`
ck19860613
  • 浏览: 87400 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

请您先登录,才能继续操作

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

阅读更多
对于如何查询和设置联系人分组,可以先看看这里


要删除某一个分组,其实对于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方法源代码

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);
1
0
分享到:
评论

相关推荐

    Android通讯录分组联系人更新

    - **清理联系人分组**:删除分组后,可能需要检查并清理那些失去分组归属的联系人,确保通讯录数据的整洁。 5. **更新分组数据** - **修改分组信息**:要更新已存在的分组,可以使用`ContentResolver.update()`...

    javaweb通讯录实现增删改查分组功能

    【标题】"javaweb通讯录实现增删改查分组功能"是一个基于JavaWeb技术构建的简单项目,旨在提供一个基本的联系人管理平台,用户可以在此平台上对联系人进行添加、删除、修改和查询操作,同时还能将联系人分组管理。...

    android 联系人模块例子

    Android还支持联系人分组管理,用户可以将联系人分到不同的组中。开发者可以通过`ContactsContract.Groups`和`ContactsContract.GroupsColumns`来操作这些分组。 8. **同步适配器**: 对于跨设备同步联系人,...

    通讯录(安卓源码,可以添加联系人和删除,查找,对联系人可以拨打,发短信)

    在本项目中,我们探讨的是一个基于Android平台的通讯录应用程序。这个应用是用Eclipse IDE开发的,它集成了核心的...开发者可以在此基础上进行扩展,例如添加联系人分组、同步云端联系人等功能,以提升应用的实用性。

    C# 联系人管理系统

    C#作为一种现代化、面向对象的编程语言,因其强大的功能和易用性,被广泛应用于开发各种类型的应用程序,其中包括联系人管理系统。本文将深入探讨一个基于C#构建的联系人管理系统,解析其设计理念、核心功能以及实现...

    C#类似于QQ分组

    这个功能可以让用户更加高效地管理和查找相关信息,类似于QQ软件中将联系人分组以便于分类和沟通。 首先,我们需要理解QQ分组的基本概念。在QQ中,用户可以创建多个分组,每个分组内包含若干个联系人,这样用户就能...

    通讯录分组列表

    3. **编辑功能**:用户可以添加、删除和重命名分组,以及将联系人移动到不同分组。此外,可能还包含批量操作,如批量移动、删除联系人等。 4. **联系人详情**:点击单个联系人,会显示其详细信息,如姓名、电话号码...

    仿QQ分组列表

    这可能包括类或对象,用于表示分组(包含分组名、成员列表等属性)和联系人(包含姓名、头像等属性)。此外,数据结构的设计应支持高效的添加、删除和查询操作。 2. 用户界面设计:UI设计是用户体验的关键。仿QQ...

    Androidの联系人群组Group操作

    在Android中,联系人群组是一种将多个联系人分组的方式,便于管理和查找。群组可以是系统预定义的,如“我的联系人”和“星标联系人”,也可以由应用自定义创建。 2. **访问联系人群组API** - `ContactsContract....

    AI智能联系人管理的程序使用说明.zip

    "AI智能联系人管理的程序使用说明.doc"和"程序使用说明.doc"是系统提供的用户手册,详细介绍了如何操作和配置系统,包括添加、修改、删除联系人,设置提醒,以及如何利用AI进行数据分析等。 联系人分布饼图".html"...

    C#oop集合 联系人管理

    - `Group`类:代表联系人分组,可能包含分组名称和包含的联系人列表,提供添加、删除联系人到分组,以及调整分组顺序的功能。 3. 封装: 为了保护数据安全,我们将使用访问修饰符(如private、public)来控制类的...

    android 联系人详解

    - **ContactsContract**:这是Android提供的一个类,定义了与联系人数据相关的常量和URI,包括数据表、分组表、显示名等。 - **ContentProvider**:Android的系统服务,负责管理特定类型的数据,如联系人数据。 ###...

    Android通讯录联系人查询,自动提示,一个人多个号码

    `ContactsContract`是Android提供的用于访问联系人数据的API,包含了获取、插入、更新和删除联系人信息的方法。当你需要查询联系人时,可以使用`Cursor`对象来遍历`ContactsContract`表中的数据。 当遇到姓名重复的...

    android学习笔记3(联系人应用)

    六、联系人分组和同步 联系人可以被组织到不同的分组中,比如家庭、朋友、同事等。Android支持联系人同步功能,开发者可以实现自己的同步适配器来同步远程数据源(如Google账户)的联系人数据到本地。 七、开发工具...

    android 联系人和短信

    4. **联系人分组**:联系人可以分配到不同的分组,`ContactsContract.Groups`和`ContactsContract.RawContacts`表分别用于管理分组和联系人与分组的关系。 二、Android短信管理 1. **SMS Provider**:短信同样通过...

    安卓Andriod源码——手机的通讯录联系人信息.zip

    - **写入**:使用ContentResolver的insert()、update()或delete()方法,创建新的联系人,修改已存在联系人,或者删除联系人。 4. **同步适配器** - Android系统使用Sync Adapter框架来处理数据同步,包括联系人...

    安卓开发-Android手机的通讯录联系人信息.zip.zip

    Android的联系人可以按组分类,通过`ContactsContract.Groups`和`ContactsContract.ContactGroups`来操作联系人分组。 10. **同步适配器**: 如果应用需要支持联系人同步,可以使用Android的SyncAdapter框架。这...

    访问通信录中的联系人和添加联系人

    在Android平台上,访问和操作设备上的通信录是应用程序常见的功能...在实际项目中,你可能还需要处理更复杂的情况,如分组、过滤、更新和删除联系人,这都需要深入理解`ContactsContract`和ContentResolver的工作方式。

    微信小程序实现通讯录功能wxSortPickerView.zip

    6. **交互优化**:为了提升用户体验,可以添加如滑动加载更多联系人、长按编辑或删除联系人等交互功能。 7. **样式定制**:微信小程序支持自定义组件样式,可以通过CSS调整`wxSortPickerView`的外观,使其符合应用...

    通讯录系统课程设计.doc

    - **分组管理**:创建、删除和编辑联系人分组,以实现更高效的联系人管理。 2. **界面设计**: - **一级界面**:主菜单,包含各个功能选项,如亲人、朋友、同学和同事的分组操作。 - **二级界面**:针对不同分组...

Global site tag (gtag.js) - Google Analytics