ContentProvider是什么?
- 四大组件之一(需要在Manifest中注册)
- 作用是为数据的访问提供统一的接口,并不能用于存储数据
- 供多个应用程序共享数据(跨进程通信)
- 自定义进程间通信
- 和系统进程间的通信(例如通讯录,图库等)
ContentProvider优缺点?
- 优点
- 数据访问的统一接口(封装性)
使用者不需要关心数据的获取方式(数据库、网络、文件等),只需要调用统一的接口处理 - 跨进程的访问
- 数据访问的统一接口(封装性)
- 缺点
不能单独使用,需要结合其他的存储方式,例如数据库、文件等。
ContentResolver是什么?
- 通过ContentResolver(内容解析者)来访问ContentProvider,通过Context.getContentResolver得到内容解析者, ContentResolver提供四个与ContentProvider相一致的方法(insert、delete、update、query),通过传入Uri来访问对应的ContentProvider方法
- Uri
- 协议
content:// - 域名
android:authorities - 路径
/contacts
- 协议
- 具体用法可以查看 Android ContentProvider实现进程间通信
工作流程
- ContentResolver通过Uri调用对应ContentProvider,ContentProvider操作数据库库文件等资源获取到相应的信息交给ContentResolver
- 如果要监听数据的改变,可以使用contentResolver.registerContentObserver(Uri,ContentObserver)来监听数据的改变,ContentObserver的创建需要传入一个Handler,通过Handler将消息发送到UI线程
访问设备数据
- 通讯录
ContactsContract.Contacts.CONTENT_URI - 外部存储卡上的图片
MediaStore.Images.Media.EXTERNAL_CONTENT_URI - 外部存储卡上的音频
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI - 外部存储卡上的视频
MediaStore.Video.Media.EXTERNAL_CONTENT_URI - 内部存储卡上的视频
MediaStore.Video.Media.INTERNAL_CONTENT_URI