android开发系列日志--(4)
一.ContentProvider
1.什么是ContentProvider
ContentProvider是Android四大组件之一, 用来将程序内的数据共享给其他程序.
在共享数据的时候, 将操作数据的代码封装成方法, 不直接把数据暴露出来, 提高安全性.
可以对ContentProvider注册ContentObserver, 实时监听数据修改.
2.怎么创建和访问ContentProvider *****
定义类继承ContentProvider, 在清单文件<application>节点中注册<provider>节点
将程序安装到手机上之后, 其他应用就可以访问了
访问时获取到ContentResolver对象, 指定Uri, 调用增删改查方法
3.ContentProvider中注意的细节 ***
在ContentProvider中可以通过Uri识别表名, 可以识别ID
使用UriMatcher类可以识别一个路径, 调用addUri()方法添加路径, 然后使用match()方法匹配一个Uri可以得到预先设置的结果码
Uri中带着的ID可以用ContentUris类的parseId()方法得到
在插入方法执行结束后, 需要返回一个带ID的Uri, 也可以使用ContentUris类的withAppendedId()方法完成
4.使用ContentObserver观察ContentProvider的数据改变 *****
使用ContentResolver的registerContentObserver()方法可以在指定Uri上注册一个ContentObserver
ContentObserver的onChange()方法在ontentProvider调用ContentResolver.notifyChange()方法时, 自动执行
二.监听短信
1.使用GIT下载源代码
查看清单得到authorities, 查看java代码了解子级路径
2.添加观察者
给系统中短信数据的内容提供者注册观察者, 在数据改变的时候, 查询最后一条记录
获取其中address, type, date, body四个字段
三.操作联系人
1.下载代码 *
和短信代码相同, 使用GIT下载, 找到authorities和子级路径
2.读联系人 ***
先读raw_contacts表得到所有的id
用id作为查询条件, 查询data表. mimetype是数据类型, data1是数据
3.写联系人
先向raw_contacts表写入一个自动生成的id
再用id作为data表中raw_contact_id列的值, 插入数据
多个插入操作应该是一组操作, 要么都成功, 要么都失败
可以使用ContentResolver类的applyBatch()方法实现
如果,这篇博客帮您解决了问题,不妨点击一下右下角的【推荐】。如果,您希望更容易地发现我的新博客,不妨点击一下【加关注】。因为,我的热情需要您的肯定和支持!感谢您的阅读,如果文章中有错误或者您有什么好的建议,也欢迎您直接留言批评指教。Thanks,friends! |