本文共 3850 字,大约阅读时间需要 12 分钟。
英文原文:
采集(更新)日期:2014-7-1搬迁自原博客:. . .
的子类,它为应用程序管理的数据提供结构化的访问方式。应用程序的所有 Content Provider 都必须在 Manifest 文件的 <provider>
元素中定义,否则,系统是不予理会也不会去运行 Content Provider 的。 只需要声明本应用程序所含的 Content Provider 即可。属于其他应用程序而本程序会用到的 Content Provider 不需要进行声明。
Android 系统用 content URI 的 authority 部分来存放对 Content Provider 的引用。例如,假定要访问存储了医务人员信息的 Content Provider 。这里调用了方法,以下 URI 作为参数之一标明了 Content Provider:
content://com.example.project.healthcareprovider/nurses/rn
content:
scheme 部分标明了这是一条指向 Android Content Provider 的 URI 。 authority 部分 com.example.project.healthcareprovider
标明了 Content Provider 本身。 Android 系统会在已知的 Provider 和 authority 清单中查找该 authority 信息 。 字符串 nurses/rn
是路径信息,Content Provider 可以用它来标识数据的某个部分。
注意,当在 <provider>
元素中定义 Content Provider 时, 请不要在 android:name
中包含 scheme 及路径信息,只要 authority 就可以了。
关于开发和使用 Content Provider 的详细信息,请参阅 API 指南 。
android:authorities
com.example.provider.cartoonprovider
)。 一般来说,它是实现 Content Provider 的
子类名。 没有默认值。至少必须指定一个 authority 。
android:enabled
true
”可以,“ false
”不允许。 默认值是“ true
”。 元素拥有自己的
属性,适用于应用程序所有内部组件,包括 Content Provider 。 要允许内容提供器的使用,
和
<provider>
的该属性都必须设置为“true
”(均为默认值即可)。 如果其中任何一个为“false
”,则该 Content Provider 将被禁用,它将不能被实例化。
android:exported
true
”:可以。 任何应用程序都可以通过 URI 访问本 Content Provider,且受限于 Content Provider 声明的权限要求。false
”:不可以。 通过设置 android:exported="false"
,可以限制对本应用程序中的 Content Provider 进行。 只有那些用户 ID 相同的应用程序才能访问到它。对于 或
小于等于
"16"
的应用程序,默认值是“true”。 对于这两个属性值为"17"
以上的应用程序,默认值为"false"
。
android:grantUriPermissions
、
和
属性的限制, 给平常无权对 Content Provider 数据的访问进行授权 — “ true
”可以授权,“ false
”不可以。 如果设为“ true
”,则可对 Content Provider 的所有数据进行授权访问。 如果设为“ false
”,那就只能对
子元素中列出的数据子集(假如存在的话)进行授权。 默认值是“ false
”。 授权机制使得程序组件能对那些受权限保护的数据进行一次性的访问。 比如,假定某条 e-mail 包含了附件,邮件程序可能会调用合适的查看器来打开附件,即使该查看器平常无权查看 Content Provider 的全部数据也没关系。
这时候,可以通过设置启动组件的 Intent 对象的 和
标志位进行授权。 比如,邮件程序可以在传入
Context.startActivity()
的 Intent 中设置 FLAG_GRANT_READ_URI_PERMISSION
。 权限即指定授予该 Intent 中的 URI。
如果启用了这种临时授权的特性,不论是将本属性设为“true
”还是定义了 子元素,那么当所涉及的 URI 要从 Content Provider 中删除时,必须调用一下
。
请参阅元素。
android:icon
元素的
属性)。 android:initOrder
android:label
元素的
属性)。 本文本标签应该设为对字符串资源的引用,这样就能像用户界面中的其他字符串一样对其进行本地化。 不过为了应用程序开发时的便利,也可以直接设置为字符串。
android:multiprocess
true
”表示可以在多个进程中运行实例,“ false
”表示不可以。 缺省值是“ false
”。 通常情况下,Content Provider 是在定义它的应用程序的进程中实例化的。 然而,如果本属性置为“true
”,则系统可以在每个需要用到它的客户端程序所在的进程中都创建一个实例,这样就避免了进程间通讯的开销。
android:name
的子类。 这应该是一个完全限定的类名称(比如“ com.example.project.TransportationProvider
”)。 不过作为简称,如过首字符为句点,则会在名称前面自动加上
元素指定的包名称。 没有默认值。名称必须指定。
android:permission
和
属性优先于本设置。 如果同时设置了
属性,则其将控制对 Content Provider 的读取。 如果设置了
属性,则其也将控制对 Content Provider 数据的修改。 关于权限的详细信息,请参阅 Manifest 介绍一文的 章节和另一篇文档 。
android:process
元素的
属性也可以为每个组件设置不同的默认进程。 但每个组件也可以用各自的 process
属性覆盖默认进程名称,使得程序可以跨越多个进程运行。 如果本属性设置的名称以冒号(':')开头,则必要时会新建一个属于该程序私有的进程,Content Provider 将在此新进程中运行。 如果进程名称以小写字母开头,则内容提供器将在一个以此名字命名的全局进程中运行,并赋予应有的访问权限。 这就允许不同应用程序的多个组件可以共享同一个进程,以减少对资源的占用。
android:readPermission
和
属性。 android:syncable
true
”表示需要同步,“ false
”表示不需要。 android:writePermission
和
属性。 转载地址:http://tvufz.baihongyu.com/