一、通讯录应用介绍


通讯录应用是Android自带的应用程序,我们看到此应用的时候,可能只认为这是一个应用,用数据库存储数据,但是实际上不是这样的。

通讯录是ContentProvider的应用,通讯录由两部分组成:

(1)com.android.providers.contacts的ContentProvider:真正存储数据的ContentProvider

(2)com.android.contacts:运用ContentResolver获取数据的图形用户界面;


二、获取ContactProvider的源代码


Android源代码: http://my.oschina.net/zhanglubing/blog/40623用git获取;

如果要获取ContactProvider,则安装git,并打开git bash,输入

git clone https://android.googlesource.com/platform/packages/providers/ContactsProvider.git即可;

目录结构如下:


为何要获取ContactProvider的源代码呢?

因为如果要访问ContentProvider,必须要了解URI的设置(authority,path等);只有查看源代码才能够知道;

AndroidManifest.xml为清单文件,列出了ContactProvider的authorities,以及要访问通讯录需要的权限;


主要的通讯录程序为ContactsProvider2.java,authorities为:contacts或com.android.contacts;


三、通讯录数据库结构介绍


表结构如下:





通讯录是存放在/data/data/com.android.providers.contacts/databases/contacts2.db,里面主要的表有:

(1)raw_contacts:存放联系人的ID,

_id属性为主键,声明为autoincrement,即不需要手动设置,其他属性也不需要手动设置就有默认值;

display_name属性为姓名;

(2)mimetypes:存放数据的类型,比如"vnd.android.cursor.item/name"表示“姓名”类型的数据,"vnd.android.cursor.item/phone_v2"表示“电话”类型的数据;

(3)data:存放具体的数据;

raw_contact_id属性用来连接raw_contacts表,每条记录表示一个具体数据;我们主要的数据(email、phone等)都存放在data表;

data1属性存放总数据;

data2属性:

-如果此记录存放姓名,则data2存放名;

-如果此记录存放电话,则data2存放类型,比如手机、家电;

-如果此记录存放组织,则data2存放类型,比如公司、其他;

-如果此记录存放地址,则data2存放类型,比如住宅,单位等;


四、对通信录做增删改查


简单的说:对通讯录操作就是对一个普通的ContentProvider操作;


1.Query


(1)根据电话号码查询姓名

(2)查询所有的联系人




2.Insert
(1)一步一步添加数据




(2)批量添加数据
核心代码: (1)ContentProviderOperation operation = ContentProviderOperation.newInsert(uri).withValue("key","value").build(); (2)resolver.applyBatch("authorities",operations);//批量提交


3.Delete

核心思想: (1)先在raw_contacts表根据姓名查出id; (2)在data表中只要raw_contact_id匹配的都删除;


4.Update


核心思想:

(1)不需要更新raw_contacts,只需要更新data表;

(2)uri=content://com.android.contacts/data 表示对data表进行操作;








更多相关文章

  1. 一句话锁定MySQL数据占用元凶
  2. Android轮播图-----viewPager
  3. Android数据存储简介
  4. Android(安卓)RecyclerView DiffUtil 局部刷新 整理 踩坑 封装
  5. Android(安卓)Room 增删改查 个人经验
  6. Android(安卓)自定义ContentProvider简单实例
  7. Android开发:使用AudioTrack播放PCM音频数据【附源码】
  8. Android(安卓)SQLiteOpenHelper
  9. Android获取assets文件夹中的数据并写入SD卡示例

随机推荐

  1. 深入Android【八】 ―― Activity间数据
  2. Android(安卓)中关于Cursor类的介绍
  3. Android(安卓)的20个超强应用
  4. Android(安卓)C++回收机制
  5. android音量控制曲线和调用过程
  6. 【Android(安卓)- V】之Toolbar的使用
  7. 开发手机刷机工具箱的过程
  8. Activity intent intent filter 广播接收
  9. Android本地存储目录研究
  10. Android(安卓)adb网络连接Offline和 adb