ContentProvider提供了一种资源访问的能力,这种能力是基于文件系统、数据库系统。网络,而不是基于进程空间,也就是说可以在app之间共享数据。
交互方式
在app开发中我们不直接与ContentProvider交互,而是通过ContentResolver对象。看起来ContentProvider是由系统来管理的,对于应用程序透明。流程看起来如此:ContentResolver将URI提交给系统,系统根据一定规则解析URI,初始化一个ContentProvider,这个ContentProvider通过URI定位到具体资源。ContentResolver通过IContentProvider指定资源的操作方式,insert、delete、bulkInsert等。
为什么要以这种方式交互呢?因为ContentProvider并不是只能由系统提供,app也可以提供。
如何定位ContentProvider
URI对应部分含义,以图片为例。

1. content:// 是通用前缀,表示该UIR用于ContentProvider定位资源。
2. authority 是授权者名称,用来确定具体由哪一个ContentProvider提供资源。因此一般authority都由类的小写全称组成,以保证唯一性。根据authority定位到ContentProvider类。
3. data_path 是数据路径,用来确定请求的是哪个数据集。如果ContentProvider近提供一个数据集,数据路径则可以省略。
4. id是数据编号,用来唯一确定数据集中的一条记录,匹配数据集中_ID字段的值。如果请求的数据不只一条,< id >可以省略。
ContentProvider的注册
<provider
android:authorities="com.example.peopleprovider"
android:name=".Peopleprovider"/>
以上注册对应的URI:content://com.example.peopleprovider//
网友评论