ContentProvider 介绍
说会这个 ContentProvider,我们什么时候会用到他呢?有下面这两种:
1.我们想在自己的应用中访问别的应用,或者说一些 ContentProvider 暴露给我们的一些数据,比如手机联系人,短信等!我们想对这些数据进行读取或者修改,这就需要用到 ContentProvider 了!
2.我们自己的应用,想把自己的一些数据暴露出来,给其他的应用进行读取或操作,我们也可以用到 ContentProvider,另外我们可以选择要暴露的数据,就避免了我们隐私数据的的泄露!
1.ContentProvider 概念讲解
2.使用系统提供的 ContentProvider
其实很多时候我们用到 ContentProvider 并不是自己暴露自己的数据,更多的时候通过 ContentResolver 来读取其他应用的信息,最常用的莫过于读取系统 APP,信息,联系人,多媒体信息等!如果你想来调用这些 ContentProvider 就需要自行查阅相关的 API 资料了!另外,不同的版本,可能对应着不同的 URL!这里给出如何获取 URL 与对应的数据库表的字段,这里以最常用的联系人为例,其他自行 google。
①来到系统源码文件下:all-src.rar -> TeleponeProvider -> AndroidManifest.xml 查找对应 API
②打开模拟器的 file exploer/data/data/com.android.providers.contacts/databases/contact2.db 导出后使用 SQLite 图形工具查看,三个核心的表:raw_contact 表,data 表,mimetypes 表!
下面演示一些基本的操作示例:
1)简单的读取收件箱信息:
核心代码:
别忘了,往 AndroidManifest.xml 加入读取收件箱的权限:
运行结果:
部分运行结果如下:
2)简单的往收件箱里插入一条信息
核心代码:
运行结果:
注意事项:
上述代码在 4.4 以下都可以实现写入短信的功能,而 5.0 上就无法写入,原因是:从 5.0 开始,默认短信应用外的软件不能以写入短信数据库的形式发短信。
3)简单的读取手机联系人
核心代码:
别忘了加读联系人的权限:
运行结果:
部分运行结果如下:
4)查询指定电话的联系人信息
核心代码:
运行结果:
5)添加一个新的联系人
核心代码:
运行结果:
别忘了权限:
3.自定义 ContentProvider
我们很少会自己来定义 ContentProvider,因为我们很多时候都不希望自己应用的数据暴露给其他应用,虽然这样,学习如何 ContentProvider 还是有必要的,多一种数据传输的方式。
流程图如下:
接下来我们就来一步步实现:
在开始之前我们先要创建一个数据库创建类(数据库内容后面会讲~):
DBOpenHelper.java
Step 1:自定义 ContentProvider 类,实现 onCreate(),getType(),根据需求重写对应的增删改查方法:
NameContentProvider.java
4.ContentObserver 监听 ContentProvider 的数据变化
版权声明: 本文为 InfoQ 作者【向阳逐梦】的原创文章。
原文链接:【http://xie.infoq.cn/article/8167e6b8d485d6ec17da2e2b9】。文章转载请联系作者。
评论