<provider>

语法
<provider android:authorities="list"
          android:directBootAware=["true" | "false"]
          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>
<intent-filter>
<path-permission>
描述
声明内容提供程序组件。内容提供程序是 ContentProvider 的子类,它提供对应用程序管理的数据的结构化访问。应用程序中的所有内容提供程序都必须在清单文件中的 <provider> 元素中定义。否则,系统将不知道它们,也不会运行它们。

仅声明作为应用程序一部分的内容提供程序。不要在应用程序中使用的其他应用程序中声明内容提供程序。

Android 系统根据提供程序的内容 URI的一部分——权限字符串存储对内容提供程序的引用。例如,假设您要访问存储有关医疗保健专业人员信息的 内容提供程序。为此,您调用方法 ContentResolver.query(),该方法除其他参数外,还采用标识提供程序的 URI

content://com.example.project.healthcareprovider/nurses/rn

content: 方案将 URI 标识为指向 Android 内容提供程序的内容 URI。权限 com.example.project.healthcareprovider 标识提供程序本身。Android 系统在其已知提供程序及其权限列表中查找权限。子字符串 nurses/rn 是一个路径,内容提供程序使用它来标识提供程序数据的子集。

<provider> 元素中定义提供程序时,您不包含 android:name 参数中的方案或路径,仅包含权限。

有关使用和开发内容提供程序的信息,请参阅 内容提供程序

属性
android:authorities
标识内容提供程序提供的数据的一个或多个 URI 权限的列表。通过分号分隔权限名称来列出多个权限。为避免冲突,请对权限名称使用 Java 风格的命名约定,例如 com.example.provider.cartoonprovider。通常,它是实现提供程序的 ContentProvider 子类的名称

没有默认值。必须至少指定一个权限。

android:enabled
系统是否可以实例化内容提供程序。如果可以,则为 "true",否则为 "false"。默认值为 "true"

<application> 元素具有其自己的 enabled 属性,该属性适用于所有应用程序组件,包括内容提供程序。 <application><provider> 属性都必须为 "true"(默认情况下它们都是如此),才能启用内容提供程序。如果两者都是 "false",则提供程序将被禁用。它不能被实例化。

android:directBootAware

内容提供程序是否支持直接启动——也就是说,它是否可以在用户解锁设备之前运行。

注意:直接启动期间,应用程序中的内容提供程序只能访问存储在设备保护存储中的数据。

默认值为"false"

android:exported
内容提供程序是否可供其他应用程序使用。
  • "true":提供程序可供其他应用程序使用。任何应用程序都可以使用提供程序的内容 URI 来访问它,但需遵守为提供程序指定的权限。
  • "false":提供程序不可供其他应用程序使用。设置android:exported="false"可将对提供程序的访问限制为您的应用程序。只有与提供程序具有相同用户 ID (UID) 的应用程序,或通过android:grantUriPermissions元素暂时授予对提供程序访问权限的应用程序才能访问它。

由于此属性是在 API 级别 17 中引入的,因此所有运行 API 级别 16 及更低版本的设备的行为都好像此属性设置为"true"。如果您将android:targetSdkVersion设置为 17 或更高版本,则对于运行 API 级别 17 及更高版本的设备,默认值为"false"

您可以设置android:exported="false",并仍然可以通过使用permission属性设置权限来限制对提供程序的访问。

android:grantUriPermissions
那些通常无权访问内容提供程序数据的用户是否可以被授予访问权限,暂时克服readPermissionwritePermissionpermissionexported属性施加的限制。

如果可以授予权限,则为"true";如果不可以,则为"false"。如果为"true",则可以向内容提供程序的任何数据授予权限。如果为"false",则只能向<grant-uri-permission>子元素(如果有)中列出的数据子集授予权限。默认值为"false"

授予权限是一种向应用程序组件提供对受权限保护的数据的一次性访问的方式。例如,当电子邮件包含附件时,邮件应用程序可能会调用相应的查看器来打开它,即使查看器没有查看所有内容提供程序数据的通用权限。

在这种情况下,权限由FLAG_GRANT_READ_URI_PERMISSIONFLAG_GRANT_WRITE_URI_PERMISSION标志在激活组件的Intent对象中授予。例如,邮件应用程序可能会将FLAG_GRANT_READ_URI_PERMISSION放入传递给Context.startActivity()Intent中。权限特定于Intent中的 URI。

如果通过将此属性设置为"true"或定义<grant-uri-permission>子元素来启用此功能,请在从提供程序删除受保护的 URI 时调用Context.revokeUriPermission()

另请参见<grant-uri-permission>元素。

android:icon
表示内容提供程序的图标。此属性设置为对包含图像定义的可绘制资源的引用。如果未设置,则改为使用为整个应用程序指定的图标。有关更多信息,请参见<application>元素的icon属性。
android:initOrder
相对于同一进程托管的其他内容提供程序,内容提供程序的实例化顺序。当内容提供程序之间存在依赖关系时,为每个内容提供程序设置此属性可确保它们按照这些依赖关系所需的顺序创建。该值是一个整数,数字越大,初始化越早。
android:label
内容提供程序的用户可读标签。如果未设置此属性,则改为使用为整个应用程序设置的标签。有关更多信息,请参见<application>元素的label属性。

标签通常设置为对字符串资源的引用,以便可以像用户界面中的其他字符串一样对其进行本地化。但是,为了方便您开发应用程序,它也可以设置为原始字符串。

android:multiprocess
如果应用在多个进程中运行,此属性决定是否创建内容提供程序的多个实例。如果为"true",则应用的每个进程都有自己的内容提供程序对象。如果为"false",则应用的进程仅共享一个内容提供程序对象。默认值为"false"

将此标志设置为"true"可以通过减少进程间通信的开销来提高性能,但也会增加每个进程的内存占用。

android:name
实现内容提供程序的类的名称,它是ContentProvider的子类。这通常是完全限定的类名,例如"com.example.project.TransportationProvider"。但是,作为简写,如果名称的第一个字符是句点,则将其附加到<manifest>元素中指定的包名。

没有默认值。必须指定名称。

android:permission
客户端必须拥有的权限才能读取或写入内容提供程序的数据。此属性是为读取和写入设置单个权限的便捷方式。但是,readPermissionwritePermissiongrantUriPermissions属性优先于此属性。

如果还设置了readPermission属性,它将控制查询内容提供程序的访问权限。如果设置了writePermission属性,它将控制修改提供程序数据的访问权限。

有关权限的更多信息,请参见应用程序清单概述中的权限部分和安全提示

android:process
内容提供程序运行的进程的名称。通常,应用程序的所有组件都在为应用程序创建的默认进程中运行。它的名称与应用程序包相同。

<application>元素的process属性可以为所有组件设置不同的默认值。但是,每个组件都可以使用其自己的process属性覆盖默认值,从而允许您将应用程序分散到多个进程中。

如果分配给此属性的名称以冒号 (:) 开头,则在需要时会创建一个专属于应用程序的新进程,并且活动将在该进程中运行。

如果进程名称以小写字母开头,则活动将在该名称的全局进程中运行,前提是它有权这样做。这允许不同应用程序中的组件共享一个进程,从而减少资源使用。

android:readPermission

客户端必须拥有的权限才能查询内容提供程序。

如果提供程序将android:grantUriPermissions设置为"true",或者如果给定的客户端满足<grant-uri-permission>子元素的条件,则客户端可以获得对内容提供程序数据的临时读取访问权限。

另请参见permissionwritePermission属性。

android:syncable
内容提供程序控制下的数据是否可以与服务器上的数据同步。如果可以,则为"true";如果不可以,则为"false"
android:writePermission

客户端需要对内容提供程序控制的数据进行更改的权限。

如果提供程序将android:grantUriPermissions设置为"true",或者如果给定的客户端满足<grant-uri-permission>子元素的条件,则客户端可以获得修改内容提供程序数据的临时写入访问权限。

另请参见permissionreadPermission属性。

引入于
API 级别 1
另请参见
内容提供程序