Android系统中的联系人也是通过ContentProvider来对外提供数据的,我们这里实现获取所有联系人、通过电话号码获取联系人、添加联系人、使用事务添加联系人。

获取所有联系人

1. Android系统中的联系人也是通过ContentProvider来对外提供数据的

2. 数据库路径为:/data/data/com.android.providers.contacts/database/contacts2.db

3. 我们需要关注的有3张表

raw_contacts:其中保存了联系人id

data:和raw_contacts是多对一的关系,保存了联系人的各项数据

mimetypes:为数据类型

4. Provider的authorites为com.android.contacts

5. 查询raw_contacts表的路径为:contacts

6. 查询data表的路径为:contacts/#/data

这个路径为连接查询,要查询“mimetype”字段可以根据“mimetype_id”查询到mimetypes表中的数据

7. 先查询raw_contacts得到每个联系人的id,在使用id从data表中查询对应数据,根据mimetype分类数据

示例:


通过电话号码获取联系人

1. 系统内部提供了根据电话号码获取data表数据的功能,路径为:data/phones/filter/*

2. 用电话号码替换“*”部分就可以查到所需数据,获取“display_name”可以获取到联系人显示名

示例:

添加联系人

1. 先向raw_contacts表插入id,路径为:raw_contacts

2. 得到id之后再向data表插入数据,路径为:data

示例:


使用事务添加联系人

1. 在添加联系人得时候是分多次访问Provider,如果在过程中出现异常,会出现数据不完整的情况,这些操作应该放在一次事务中

2. 使用ContentResolver的applyBatch(String authority,ArrayList<ContentProviderOperation> operations) 方法可以将多个操作在一个事务中执行

3. 文档位置:

file:///F:/android-sdk-windows/docs/reference/android/provider/ContactsContract.RawContacts.html

示例:


更多相关文章

  1. 一句话锁定MySQL数据占用元凶
  2. pc android sqlcipher 加密
  3. Android(安卓)学习记录-SQLite
  4. android 给listview或gridview添加数据加载时的动画
  5. MTK Android滑盖或翻盖处理驱动
  6. Android实用代码七段(三)
  7. Android(安卓)activity 开启时数据保存和恢复
  8. Android原生下拉刷新SwipeRefreshLayout实践
  9. Android(安卓)Jetpack架构组件-Paging介绍及实践

随机推荐

  1. android 横竖屏转换
  2. Android系列之浅谈Android(安卓)3D旋转
  3. Android(安卓)UI开发第二十八篇——Fragm
  4. 应用兼容性Android(安卓)Studio IDEA:基于
  5. 【Android(安卓)UI】Android(安卓)Layout
  6. Android(安卓)Studio主题设置
  7. android的Handler
  8. Android开机LOGO
  9. 为Android开发者定制的搜索引擎
  10. Android上开发Android软件