对于如何查询和设置联系人分组,可以先看看
这里
要删除某一个分组,其实对于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);
分享到:
相关推荐
- **清理联系人分组**:删除分组后,可能需要检查并清理那些失去分组归属的联系人,确保通讯录数据的整洁。 5. **更新分组数据** - **修改分组信息**:要更新已存在的分组,可以使用`ContentResolver.update()`...
【标题】"javaweb通讯录实现增删改查分组功能"是一个基于JavaWeb技术构建的简单项目,旨在提供一个基本的联系人管理平台,用户可以在此平台上对联系人进行添加、删除、修改和查询操作,同时还能将联系人分组管理。...
Android还支持联系人分组管理,用户可以将联系人分到不同的组中。开发者可以通过`ContactsContract.Groups`和`ContactsContract.GroupsColumns`来操作这些分组。 8. **同步适配器**: 对于跨设备同步联系人,...
在本项目中,我们探讨的是一个基于Android平台的通讯录应用程序。这个应用是用Eclipse IDE开发的,它集成了核心的...开发者可以在此基础上进行扩展,例如添加联系人分组、同步云端联系人等功能,以提升应用的实用性。
C#作为一种现代化、面向对象的编程语言,因其强大的功能和易用性,被广泛应用于开发各种类型的应用程序,其中包括联系人管理系统。本文将深入探讨一个基于C#构建的联系人管理系统,解析其设计理念、核心功能以及实现...
这个功能可以让用户更加高效地管理和查找相关信息,类似于QQ软件中将联系人分组以便于分类和沟通。 首先,我们需要理解QQ分组的基本概念。在QQ中,用户可以创建多个分组,每个分组内包含若干个联系人,这样用户就能...
3. **编辑功能**:用户可以添加、删除和重命名分组,以及将联系人移动到不同分组。此外,可能还包含批量操作,如批量移动、删除联系人等。 4. **联系人详情**:点击单个联系人,会显示其详细信息,如姓名、电话号码...
这可能包括类或对象,用于表示分组(包含分组名、成员列表等属性)和联系人(包含姓名、头像等属性)。此外,数据结构的设计应支持高效的添加、删除和查询操作。 2. 用户界面设计:UI设计是用户体验的关键。仿QQ...
在Android中,联系人群组是一种将多个联系人分组的方式,便于管理和查找。群组可以是系统预定义的,如“我的联系人”和“星标联系人”,也可以由应用自定义创建。 2. **访问联系人群组API** - `ContactsContract....
"AI智能联系人管理的程序使用说明.doc"和"程序使用说明.doc"是系统提供的用户手册,详细介绍了如何操作和配置系统,包括添加、修改、删除联系人,设置提醒,以及如何利用AI进行数据分析等。 联系人分布饼图".html"...
- `Group`类:代表联系人分组,可能包含分组名称和包含的联系人列表,提供添加、删除联系人到分组,以及调整分组顺序的功能。 3. 封装: 为了保护数据安全,我们将使用访问修饰符(如private、public)来控制类的...
- **ContactsContract**:这是Android提供的一个类,定义了与联系人数据相关的常量和URI,包括数据表、分组表、显示名等。 - **ContentProvider**:Android的系统服务,负责管理特定类型的数据,如联系人数据。 ###...
`ContactsContract`是Android提供的用于访问联系人数据的API,包含了获取、插入、更新和删除联系人信息的方法。当你需要查询联系人时,可以使用`Cursor`对象来遍历`ContactsContract`表中的数据。 当遇到姓名重复的...
六、联系人分组和同步 联系人可以被组织到不同的分组中,比如家庭、朋友、同事等。Android支持联系人同步功能,开发者可以实现自己的同步适配器来同步远程数据源(如Google账户)的联系人数据到本地。 七、开发工具...
4. **联系人分组**:联系人可以分配到不同的分组,`ContactsContract.Groups`和`ContactsContract.RawContacts`表分别用于管理分组和联系人与分组的关系。 二、Android短信管理 1. **SMS Provider**:短信同样通过...
- **写入**:使用ContentResolver的insert()、update()或delete()方法,创建新的联系人,修改已存在联系人,或者删除联系人。 4. **同步适配器** - Android系统使用Sync Adapter框架来处理数据同步,包括联系人...
Android的联系人可以按组分类,通过`ContactsContract.Groups`和`ContactsContract.ContactGroups`来操作联系人分组。 10. **同步适配器**: 如果应用需要支持联系人同步,可以使用Android的SyncAdapter框架。这...
在Android平台上,访问和操作设备上的通信录是应用程序常见的功能...在实际项目中,你可能还需要处理更复杂的情况,如分组、过滤、更新和删除联系人,这都需要深入理解`ContactsContract`和ContentResolver的工作方式。
6. **交互优化**:为了提升用户体验,可以添加如滑动加载更多联系人、长按编辑或删除联系人等交互功能。 7. **样式定制**:微信小程序支持自定义组件样式,可以通过CSS调整`wxSortPickerView`的外观,使其符合应用...
- **分组管理**:创建、删除和编辑联系人分组,以实现更高效的联系人管理。 2. **界面设计**: - **一级界面**:主菜单,包含各个功能选项,如亲人、朋友、同学和同事的分组操作。 - **二级界面**:针对不同分组...