android 1.6 联系人数据的研究
来源:互联网 发布:yy主播好听网络歌曲 编辑:程序博客网 时间:2024/05/22 03:27
一、简介
android操作系统中,联系人信息是我们经常要获取的。作为嵌入式操作系统,无外乎几个主要功能:电话、短信、上网等。联系人信息是我们用的比较多的。但是,要获取联系人信息,我们会遇到一些概念和相关的类(content provider, URI等),它们之间是错综复杂的,不易理解。为了方便我们对联系人信息的获取,我们必须找到一种方法,能快速的掌握其中的关系,这就是本文的出发点。
对联系人数据库的操作实际上就是:通过Android封装的接口,对联系人数据库进行的操作,这些操作包括:读取、更新、删除等。本文主要围绕这一点展开,分析联系人数据库和android相关接口之间的关系,以利于我们利用android接口获取想要的联系人信息。
本文分析所采用的android操作系统版本为1.6。
二、数据库分析
要了解联系人数据库相关的操作,就必须了解联系人的数据库表的结构,android 1.6中,联系人的数据库位于一下目录中。
/data/data/com.android.providers.contacts/databases/contacts.db
contacts.db是sqlite数据库文件,使用sqlite管理软件便可打开。该数据库文件中包含了几个和联系人相关的表:contact_methods,groups,groupmembership,people,phones等。看名称我们大概就知道它们用来保存什么数据,这里要注意的是表contact_methods用来存储联系人的地址、Email和IM号码。下面就简单的分析一下和联系人关系紧密的几个表。
2.1 people
contacts表保存了联系人的相关基本信息,具体定义参见下图:
简单的介绍主要的几个字段,参见如下说明,没提到的字段可按名称猜测其用途。
_id: 用于标识联系人
name: 联系人的名字
notes: 备注
primary_phone: 首要的手机号码
primary_organization: 首要的组织
primary_email: 首要的email地址
2.2 contact_methods
该表主要保存了联系人的电话号码、email地址和地址,具体参见如下定义:
主要字段的描述如下:
_id: 标识
person: 每条记录(数据的一行)所属的联系人id号。
kind: 这个字段用来区分记录是电话号码、email地址,还是地址
data: 用来保存实际的电话号码、email地址或地址的值
type: 指定了电话号码、email地址或地址的类型,比如:email是工作、家庭,还是自定义等
label: 貌似是用来自定义数据的字类型名称,这个需要测试才知道确切含义。
isprimary: 是否是首选
从该表的定义可以看出,用户可以自定义其它类型的数据添加在此表中,以扩充联系人的属性。
2.3 group, groupmembership
表group保存了所有的联系人分组,而groupmembership则保存了联系人和分组的关联,通过表groupmembership可以知道那个联系人在那个分组。因为比较简单此处就不详细描述。
2.4 其它
其它的表,如若用到,按名称则可以猜测大概用途,此文也不作详细介绍。而且,在android上,一般情况下,我们并不需要直接操作数据库文件,因此,对于表及具体的信息并不需要了解的太详细,知道大概就能应对一般的需求。
三、操作联系人数据
在android上,要操作contacts.db,不需要使用select语句操作。android对select语句进行了封装,具体的是通过ContentSolver类来封装的,这个在android文档里有介绍,此处就不多说。
为了能让应用操作某一个特定的表,android提供以content://开头的Uri,用来唯一标识数据库中的表,联系人相关的表也不例外,比如,表people的Uri为:
content://contacts/people
这种格式有点类似于网址,contacts标识了和联系人相关的表,people是上面提到的表people。再比如,email的Uri为:
content://contacts/contact_methods/email
contact_methods为上面提到的表contact_methods,而email代表了表contact_methods中的kind值,也就是说为了获取email方便,为email也设立了逻辑上独立的Uri。
实际上,和联系人相关的表的Uri,android已经作了很好的封装,相关的类位于android.provider.Contacts下。类ContactMethods对应表contact_methods,People对应表people,其它以此类推。每个和表相关的类中定义了常量CONTENT_URI,用来标识表;以及_ID等字符串常量用来表示表列的属性值,这些封装都是和实际的数据库表一一对应的。
通过android.provider中的类,我们可以知道联系人中有哪些表,以及表的结构是怎么样的。剩下来的工作就是操作这些表了,和表相关的操作被封装在ContentResolver中,可以通过Activity的getContentResolver()方法获取,你可以new一个新的Activity,也可以使用自己的Activity。主要有三个接口:query,insert,delete。它只是封装了SQL语句,但仅仅是SQL语句的一个子集,这也就意味着这些接口有可能无法替代直接的SQL。
四、总结
android联系人的核心在于联系人的db文件的定义,其它的概念都是围绕这个文件来展开的。如果你能理清这个db文件中的表的关系,你甚至直接可以操作这些表(911助手就是这么做的),希望本文能让你想起点什么。
- android 1.6 联系人数据的研究
- [android研究联系人之一]联系人IM/website数据操作
- [android研究联系人之二]联系人Email/Nickname数据操作
- [android研究联系人之三]联系人Phone/Organization数据操作
- [android研究联系人之四]联系人StructuredPostal/StructuredName数据操作
- 向Android系统自带的联系人界面添加数据
- android 数据库 联系人数据的一些常用URI
- 向Android系统自带的联系人界面添加数据
- Android添加数据到系统自带的联系人界面
- Android关于手机数据读取联系人数据
- Android 选择系统联系人并读取联系人数据
- 完美解决android监听联系人数据变化
- Android如何获取系统联系人数据?
- android 访问系统通讯录得到联系人数据
- Android contentResolver得到本机联系人数据
- Android ContentResolver读取手机系统数据<联系人>
- Android------读取并选择系统联系人数据
- Android中访问联系人数据示例
- Linux下使用J2EE的一点感受
- 数据结构 算法 我花了一学期整理的
- 商品销售管理系统设计论文--毕业设计
- J2ee企业应用测试实践 学习示例
- 泛型
- android 1.6 联系人数据的研究
- js定时器
- 程序员面试题精选100题(06)-判断整数序列是不是二元查找树的后序遍历结果
- 几种函数调用方式
- QOS 介绍(转)
- 从 C++ 到 .NET——正则表达式 by Stanley B. Lippman
- jBPM4.3的安装过程
- 【转】InnoDB和MyISAM的技术资料
- SQLite资料