怎么删除starred in android这个联系人分组,联系人总结
Android联系人分析总结
Date
Issue
Description
Author
<09/26/2016>
<0.1>
初始版本
杨冠楠
在Android中,结构化数据库时通过以下机制提供的:
Sqlite数据库:SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
ConentProvider:内容提供器,提供一种通用的,良好的接口来使用和共享数据。
★ContactsDatabaseHelper
该类继承了SQLiteOpenHelper,SQLiteOpenHelper是一个抽象类,用来实现创建,打开数据库,主要有以下方法:
onCreate(SQLiteDatabase db):在数据库第一次产生时会调用该方法,一般用来创建数据库的表;
getWritableDatabase():打开一个可写的数据库,返回值为SQLiteDatabase;
getReadableDatabase():打开一个可读的数据库,返回值为SQLiteDatabase;
★SQLiteContentProvider,该类继承了ContentProvider,ContentProvider类中有一些常用接口比如insert(),delete()等,而SQLiteContentProvider实现了ContentProvider类中这些标准接口,从而能使其它的应用程序保存和读取到你想要的数据,那么其它应用程序是如何找到对应的Provider的呢,比如以联系人插入为例:
实际上是通过Uri找到,Uri实际上就是一个路径,content://是前缀,Android默认都是这样,com.android.contactsUri标示,它定义了那个ContentProvider提供数据,在这里当然是ContentProvider2, /raw_contacts表示的是操作那张表。
Name
Declared Type
Type
Size
Not Null
Not Null On Conflict
Default Value
_id
INTEGER
INTEGER
0
FALSE
name_raw_contact_id
INTEGER
INTEGER
0
FALSE
photo_id
INTEGER
INTEGER
0
FALSE
custom_ringtone
TEXT
TEXT
0
FALSE
send_to_voicemail
INTEGER
INTEGER
0
TRUE
0
times_contacted
INTEGER
INTEGER
0
TRUE
0
last_time_contacted
INTEGER
INTEGER
0
FALSE
starred
INTEGER
INTEGER
0
TRUE
0
in_visible_group
INTEGER
INTEGER
0
TRUE
1
has_phone_number
INTEGER
INTEGER
0
TRUE
0
lookup
TEXT
TEXT
0
FALSE
status_update_id
INTEGER
INTEGER
0
FALSE
single_is_restricted
INTEGER
INTEGER
0
TRUE
0
name_raw_contact_id:该联系人对应在raw_contact表中的id;
photo_id:保存着该联系人照片id
in_visible_group:在联系人列表中是否可见标志位
has_phone_number:该联系人是否存有电话号码
lookup:通过姓名查找的编码值
3.2 raw_contacts表,该表保存着联系人详细信息,与上面的contacts表相对应:
Name
Declared Type
Type
Size
Not Null
Default Value
_id
INTEGER
INTEGER
0
FALSE
is_restricted
INTEGER
INTEGER
0
FALSE
0
account_name
STRING
STRING
0
FALSE
NULL
account_type
STRING
STRING
0
FALSE
NULL
sourceid
TEXT
TEXT
0
FALSE
version
INTEGER
INTEGER
0
TRUE
1
dirty
INTEGER
INTEGER
0
TRUE
0
deleted
INTEGER
INTEGER
0
TRUE
0
contact_id
INTEGER
INTEGER
0
FALSE
aggregation_mode
INTEGER
INTEGER
0
TRUE
0
aggregation_needed
INTEGER
INTEGER
0
TRUE
1
custom_ringtone
TEXT
TEXT
0
FALSE
send_to_voicemail
INTEGER
INTEGER
0
TRUE
0
times_contacted
INTEGER
INTEGER
0
TRUE
0
last_time_contacted
INTEGER
INTEGER
0
FALSE
starred
INTEGER
INTEGER
0
TRUE
0
display_name
TEXT
TEXT
0
FALSE
display_name_alt
TEXT
TEXT
0
FALSE
display_name_source
INTEGER
INTEGER
0
TRUE
0
phonetic_name
TEXT
TEXT
0
FALSE
phonetic_name_style
TEXT
TEXT
0
FALSE
sort_key
TEXT
TEXT
0
FALSE
sort_key_alt
TEXT
TEXT
0
FALSE
name_verified
INTEGER
INTEGER
0
TRUE
0
contact_in_visible_group
INTEGER
INTEGER
0
TRUE
0
sync1
TEXT
TEXT
0
FALSE
sync2
TEXT
TEXT
0
FALSE
sync3
TEXT
TEXT
0
FALSE
sync4
TEXT
TEXT
0
FALSE
store_type
INTEGER
INTEGER
0
TRUE
0
account_name:该项如果是从gmail等其他第三方软件会不同,直接用手机存入都是Longcheer,通常和account_type一起联用
aggregation_mode:数据是否同步到contacts表中
sort_key:在查询联系人的时候,是否按字母顺序查询
store_type:是我们自己加入的一行,用来区分存入的是SIM卡还是手机联系人
3.3 data表,该表保存着联系人所用信息,包括电话号码,email等,是联系人中最大最复杂的一张表:
Name
Declared Type
Type
Size
Not Null
Default Value
_id
INTEGER
INTEGER
0
FALSE
package_id
INTEGER
INTEGER
0
FALSE
mimetype_id
INTEGER
INTEGER
0
TRUE
raw_contact_id
INTEGER
INTEGER
0
TRUE
is_primary
INTEGER
INTEGER
0
TRUE
0
is_super_primary
INTEGER
INTEGER
0
TRUE
0
data_version
INTEGER
INTEGER
0
TRUE
0
data1
TEXT
TEXT
0
FALSE
data2
TEXT
TEXT
0
FALSE
data3
TEXT
TEXT
0
FALSE
data4
TEXT
TEXT
0
FALSE
data5
TEXT
TEXT
0
FALSE
data6
TEXT
TEXT
0
FALSE
data7
TEXT
TEXT
0
FALSE
data8
TEXT
TEXT
0
FALSE
data9
TEXT
TEXT
0
FALSE
data10
TEXT
TEXT
0
FALSE
data11
TEXT
TEXT
0
FALSE
data12
TEXT
TEXT
0
FALSE
data13
TEXT
TEXT
0
FALSE
data14
TEXT
TEXT
0
FALSE
data15
TEXT
TEXT
0
FALSE
data_sync1
TEXT
TEXT
0
FALSE
data_sync2
TEXT
TEXT
0
FALSE
data_sync3
TEXT
TEXT
0
FALSE
data_sync4
TEXT
TEXT
0
FALSE
resource
INTEGER
INTEGER
0
TRUE
0
mimetype_id:该项是来区分该列中保存的是姓名,还是email,还是电话号码
_id
类型
mimetype
1
vnd.android.cursor.item/email_v2
2
聊天账户(qq,Aim等)
vnd.android.cursor.item/im
3
地址
vnd.android.cursor.item/postal-address_v2
4
照片路径
vnd.android.cursor.item/photo
5
电话号码
vnd.android.cursor.item/phone_v2
6
名字
vnd.android.cursor.item/name
7
组织
vnd.android.cursor.item/organization
8
vnd.android.cursor.item/nickname
9
群组
vnd.android.cursor.item/group_membership
raw_contact_id:对应raw_contacts中的id
is_super_primary:比如说如果有多个电话号码,该项是否是默认值
3.4 表之间的关系
4 联系人中的数据操作流程
以主界面的DefaultContactBrowseListFragment为例,继承关系如图
继承自ContactEntryListFragment的List界面的数据加载流程如下:
在Fragment中通过LoaderManager来对CursorLoader的创建和管理,Fragment中持有一个ContactEntryListAdapter对象,CursorLoader的参数配置等都放在ContactEntryListAdapter中处理,CursorLoader数据加载完成之后回调到Fragment中来,然后通过ContactEntryListAdapter来控制数据的刷新,以及UI的控制
DefaultContactBrowseListFragment对应的Adapter为DefaultContactListAdapter,对应的CursorLoader为ProfileAndContactsLoader
其他操作
对于联系人的创建、更新、删除一般情况下都封装在ContactSaveService类中,如图:
ContactSaveService类继承自IntentService,是一个用于异步操作联系人数据的service,在完成数据操作之后,通过请求操作的时候传递来Intent(Intent中包含需要回调的Activity和Action)回调到Activity中来通知UIThread进行UI update
以create contact为例:
ContactEditorFragment.sava()方法中
ContactSaveService中createSaveContactIntent(),传递了回调需要的参数
ContactSaveService中saveContact()中
能够回调到Activity是因为,Contact中有关联系人操作的Activity的基类ContactsActivity实现了ContactSaveService.Listener,然后在onCreate中ContactSaveService.registerListener(this),然后通过上面的代码逻辑最终会调用到
5 联系人UI 分析
这里主要看下编辑界面的UI,这里比较有特点,不同于其他UI界面.
编辑界面在ContactEditorActivity –> ContactEditorFragment中,编辑界面的UI,是一个自定义的RawContactEditorView,下面是数据传递和绑定的流程图
Fragment中持有自定义view对象RawContactEditorView和数据对象RawContactDeltaList,从数据库中查询出数据Contact之后,讲数据封装到RawContactDeltaList中,然后通过bindeditors、editor.setState方法将RawContactDeltaList数据传递给自定义view,然后RawContactEditorView将会将数据拆分,然后传递各个子view,同时也将RawContactDeltaList传递过去,然后数据更新就会在子view中完成,当Fragment中需要保存联系人的时候,就可以直接使用RawContactDeltaList,保存联系人的操作和上面的数据交互流程类似。
怎么删除starred in android这个联系人分组,联系人总结相关推荐
- android 仿qq好友列表分组效果及联系人分组效果
历史记录仿QQ好友列表的动态效果 以及联系人的分组效果 QQ朋友分组的功能做的不错,大家都很认可,那么到底他的分组并且滑动的时候,标题能停留在顶部是如何实现的呢?今天从网上搜索了一下资料,自己运行了 ...
- Android通讯录管理 获取联系人 通话记录 短信消息 一
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Andr ...
- Android仿微信添加联系人列表,内附有截图和demo源码
最新demo地址,仿微信添加联系人WXAddPersonDemo 分享一个Android仿微信选择联系人页面 之前做的App主要是工具类的,而且公司的产品经理也喜欢在App里设计很多自定义控件,所以比 ...
- android负责sim卡的应用,android读取sim卡联系人
SIM的provider是IccProvider.既然是provider,就和操作Contact的provider类似的,只是有一些微小差别. IccProvider的Uri是content://ic ...
- 基于android手机群删联系人模块的设计与实现 论文,基于Android手机群删联系人模块的设计与实现...
摘要: 随着移动互联网技术的发展,手机作为我们日常生活中最常用到的通讯设备,在功能上也是越来越强大.由于Android操作系统平台有良好的便捷性和开放性,使得Android操作系统手机越来越受到大家的 ...
- android qq分组展开,Android仿qq分组管理的第三方库
本文实例为大家分享了Android仿qq分组管理的第三方库,供大家参考,具体内容如下 下面先看效果 我们点击展开与折叠分组的功能在库里面是已经封装好的,只能把它已入到项目中,就可以直接用了,十分的方便 ...
- android通讯录管理(获取联系人,通话记录,短信消息),Android通讯录管理(获取联系人、通话记录、短信消息)(二)...
Android通讯录管理(获取联系人.通话记录.短信消息)(二) 前言:上一篇博客介绍的是获取联系人的实现,本篇博客将介绍通话记录的实现. 界面布局: /Contact_Demo/res/layout ...
- IM实现联系人及联系人分组的数据库设计
openfire中通过ofgroup/ofgroupprop/ofgroupuser实现组织结构中的分组,通过ofroster/ofrostergroups实现好友关系中的分组.但是呢,我们做二次开发 ...
- Android向通讯录添加联系人的一般方法
Android向通讯录添加联系人的一般方法 以一个简单的例子加以说明,记得需要相应的权限: <uses-permission android:name="android.perm ...
最新文章
- 双系统如何删除Linux
- 【Paddy】数据库监控系列(一) - 监控理念
- 关于spring-mvc.xml的mvc:resources元素浅析。
- 停课不停学,优酷直播如何将网课点名延迟降到0.6s?
- Tomcat5.5报错:Apache Portable Runtime was not found
- nio~view buffer
- IBM 的大型机 z Systems 引入 Go 语言
- 修改手机屏幕刷新率_手机屏幕没有高刷新率算不上旗舰机?看看网友都是如何回答的...
- python max((1、2、3)*2)_Python functional.max_pool2d方法代码示例
- Swift4.0复习协议
- rem单位中html默认字号,轻松掌握CSS3中的字体大小单位rem的使用方法
- 云计算 码率适配限速_5G 成熟后,带宽足够且云计算力够大,会不会对 PC 的升级需求放缓?...
- Hybrid和Tagged Untagged理解
- 《机器学习基石》笔记:第一讲
- Napatech网络加速卡
- 微软Azure 虚拟机支持多种 Linux 发行版!
- matlab rloess,比较ggplot loess拟合和loess拟合函数
- 图片记录:2008年12月4日夜晚,暴风雪突袭烟台-上
- C++小白如何做简单游戏
- 没有专业技能不要紧,通过快营通也能月入上千元
热门文章
- java实现复制excel模板(多个工作表)并下载的代码
- 二叉树层序遍历——java
- Programming with Multiple Paradigms in Lua(Object-Oriented Programming)
- 【二】2D测量 Metrology——add_metrology_object_generic()算子
- 随感20221227
- 第10章信源编码思考题
- 复试线388分!中科大软院公布考研分数线!
- Godaddy主机导入MSSQL数据库教程
- Sizes of tensors must match except in dimension 1. Got 61 and 60 in dimension 2
- 计算机行业岗位排名,全国“最缺工”100个职业排行,这些专业就业率高,发展前景好...