<provider>
语法:
<provider android:authorities="list"
android:enabled=["true" | "false"]
android:exported=["true" | "false"]
android:grantUriPermissions=["true" | "false"]
android:icon="drawable resource"
android:initOrder="integer"
android:label="string resource"
android:multiprocess=["true" | "false"]
android:name="string"
android:permission="string"
android:process="string"
android:readPermission="string"
android:syncable=["true" | "false"]
android:writePermission="string" >
. . .
</provider>
包含于:
<application>
可以包含:
<meta-data>
<grant-uri-permission>
<path-permission>
说明:
声明内容提供程序组件。内容提供程序是ContentProvider的子类,它为应用程序管理的数据提供结构化访问。必须在清单文件的<provider>元素中定义应用程序中的所有内容提供者;否则,系统不知道它们并且不运行它们。
您只声明属于您的应用程序的内容提供者。不应声明您在应用程序中使用的其他应用程序中的内容提供程序。
Android系统根据提供者的内容URI的一部分的权限字符串存储对内容提供者的引用。例如,假设您要访问存储有关医疗保健专业人员信息的内容提供商。要执行此操作,请调用方法ContentResolver.query(),该方法在其他参数中使用标识提供程序的URI:
content://com.example.project.healthcareprovider/nurses/rn
content:scheme将URI标识为指向Android内容提供者的内容URI。权限com.example.project.healthcareprovider标识提供者本身; Android系统在其已知提供商及其权限列表中查找权限。子字符串nurses / rn是路径,内容提供者可以使用该路径来标识提供者数据的子集。
请注意,在<provider>元素中定义提供程序时,不要在android:name参数中包含方案或路径,只包括权限。
有关使用和开发内容提供程序的信息,请参阅API指南,内容提供程序。
属性:
android:authorities
一个或多个URI权限的列表,用于标识内容提供商提供的数据。通过用分号分隔它们的名称来列出多个权限。为避免冲突,权限名称应使用Java样式的命名约定(例如com.example.provider.cartoonprovider)。通常,它是实现提供程序的ContentProvider子类的名称
没有默认值。必须至少指定一个权限。
android:enabled
内容提供者是否可以由系统实例化 - 如果可以,则为“true”,否则为“false”。默认值是true”。
<application>元素具有自己的enabled属性,适用于所有应用程序组件,包括内容提供程序。 <application>和<provider>属性必须都为“true”(因为它们都是默认值)才能启用内容提供程序。如果其中任何一个为“假”,则提供者被禁用;它无法实例化。
android:exported
内容提供商是否可供其他应用程序使用:
- true:提供程序可供其他应用程序使用。任何应用程序都可以使用提供程序的内容URI来访问它,具体取决于为提供程序指定的权限。
- false:提供程序不可用于其他应用程序。设置android:exported =“false”以限制对应用程序的提供程序的访问。只有与提供者具有相同用户ID(UID)的应用程序才能访问它。
对于将android:minSdkVersion或android:targetSdkVersion设置为“16”或更低的应用程序,默认值为“true”。对于将这些属性中的任何一个设置为“17”或更高的应用程序,默认值为“false”。
您可以设置android:exported =“false”,并通过使用permission属性设置权限来限制对提供者的访问。
android:grantUriPermissions
通常无权访问内容提供者数据的人是否可以被授予这样做的权限,暂时克服readPermission,writePermission和权限属性所施加的限制 - 如果可以授予权限则为“true”,并且“假“如果没有。如果为“true”,则可以向任何内容提供商的数据授予权限。如果为“false”,则只能授予<grant-uri-permission>子元素中列出的数据子集的权限(如果有)。默认值为“false”。
授予权限是一种为应用程序组件一次性访问受权限保护的数据的方法。例如,当电子邮件消息包含附件时,即使查看者没有查看所有内容提供者的数据的一般许可,邮件应用程序也可以呼叫适当的查看者打开它。
在这种情况下,权限由激活组件的Intent对象中的FLAG_GRANT_READ_URI_PERMISSION和FLAG_GRANT_WRITE_URI_PERMISSION标志授予。例如,邮件应用程序可能会将FLAG_GRANT_READ_URI_PERMISSION放入传递给Context.startActivity()的Intent中。该权限特定于Intent中的URI。
如果通过将此属性设置为“true”或通过定义<grant-uri-permission>子元素来启用此功能,则必须在从提供程序中删除覆盖的URI时调用Context.revokeUriPermission()。
另请参阅<grant-uri-permission>元素。
android:icon
表示内容提供商的图标。必须将此属性设置为对包含图像定义的可绘制资源的引用。如果未设置,则使用为整个应用程序指定的图标(请参阅<application>元素的图标属性)。
android:initOrder
相对于由同一进程托管的其他内容提供程序,应实例化内容提供程序的顺序。当内容提供者之间存在依赖关系时,为每个提供者设置此属性可确保按照这些依赖关系所需的顺序创建它们。该值是一个简单的整数,首先初始化更高的数字。
android:label
提供的内容的用户可读标签。如果未设置此属性,则使用整个应用程序的标签集(请参阅<application>元素的label属性)。
应将标签设置为对字符串资源的引用,以便它可以像用户界面中的其他字符串一样进行本地化。但是,为了方便您开发应用程序,它也可以设置为原始字符串。
android:multiprocess
是否可以在每个客户端进程中创建内容提供程序的实例 - 如果实例可以在多个进程中运行,则为“true”,否则为“false”。默认值为“false”。
通常,内容提供程序在定义它的应用程序的过程中实例化。但是,如果此标志设置为“true”,则系统可以在每个进程中创建一个实例,其中有一个客户端想要与之交互,从而避免进程间通信的开销。
android:name
实现内容提供程序的类的名称,ContentProvider的子类。这应该是一个完全限定的类名(例如,“com.example.project.TransportationProvider”)。但是,作为简写,如果名称的第一个字符是句点,则将其附加到<manifest>元素中指定的包名称。
没有默认值。必须指定名称。
android:permission
客户端必须具有读取或写入内容提供者数据的权限的名称。此属性是为读取和写入设置单个权限的便捷方式。但是,readPermission和writePermission属性优先于此属性。如果还设置了readPermission属性,则它控制查询内容提供程序的访问权限。如果设置了writePermission属性,它将控制用于修改提供者数据的访问权限。
有关权限的更多信息,请参阅简介中的“权限”部分和单独的文档“安全性和权限”。
android:process
内容提供程序应运行的进程的名称。通常,应用程序的所有组件都在为应用程序创建的默认进程中运行。它与应用程序包的名称相同。 <application>元素的process属性可以为所有组件设置不同的默认值。但是每个组件都可以使用自己的流程属性覆盖默认值,从而允许您跨多个流程分布应用程序。
如果分配给此属性的名称以冒号(':')开头,则在需要时创建一个专用于应用程序的新进程,并在该进程中运行活动。如果进程名称以小写字符开头,则活动将在该名称的全局进程中运行,前提是它具有执行此操作的权限。这允许不同应用程序中的组件共享进程,从而减少资源使用。
android:readPermission
客户端必须具有查询内容提供者的权限。另请参见permission和writePermission属性。
android:syncable
内容提供者控制下的数据是否与服务器上的数据同步 - 如果要同步则为“true”,否则为“false”。
android:writePermission
客户端必须具有的权限才能更改内容提供程序控制的数据。另请参见permission和readPermission属性。
引入于:
API Level 1
参阅:
Content Providers