<provider>

sintaxis:
<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>
se incluye en:
<application>
puede contener:
<meta-data>
<grant-uri-permission>
<intent-filter>
<path-permission>
descripción:
Declara un componente de proveedor de contenido. Un proveedor de contenido es una subclase de ContentProvider que proporciona acceso estructurado a los datos que administra la aplicación. Todos los proveedores de contenido de tu aplicación deben definirse en un elemento <provider> en el archivo de manifiesto. De lo contrario, el sistema no los reconoce y, por consiguiente, no los ejecuta.

Solo debes declarar aquellos que forman parte de tu aplicación. No declares proveedores de contenido en otras aplicaciones que uses en tu aplicación.

El sistema Android almacena referencias a proveedores de contenido en función de una string de autoridad, que es parte del URI de contenido del proveedor. Por ejemplo, supongamos que quieres acceder a un proveedor de contenido que almacena información sobre profesionales del cuidado de la salud. Para ello, debes llamar al método ContentResolver.query(), que toma un URI que identifica al proveedor, entre otros argumentos:

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

El esquema content: identifica el URI como un URI de contenido que apunta a un proveedor de contenido de Android. La autoridad com.example.project.healthcareprovider identifica al proveedor. El sistema Android busca la autoridad en su lista de proveedores conocidos y sus autoridades. La subcadena nurses/rn es una ruta de acceso que el proveedor de contenido puede usar para identificar subconjuntos de datos del proveedor.

Ten en cuenta que, cuando defines tu proveedor en el elemento <provider>, no debes incluir el esquema ni la ruta de acceso en el argumento android:name, sino solo la autoridad.

Para obtener información sobre el uso y el desarrollo de proveedores de contenido, consulta Proveedores de contenido.

atributos:
android:authorities
Es una lista de autoridades de URI que identifica los datos que ofrece el proveedor de contenido. Para enumerar varias autoridades, debes separar sus nombres con un punto y coma. A fin de evitar conflictos, los nombres de las autoridades deben seguir una convención de nombres de estilo Java, como com.example.provider.cartoonprovider. Por lo general, es el nombre de la subclase ContentProvider que implementa el proveedor.

No hay ningún valor predeterminado. Se debe especificar al menos una autoridad.

android:enabled
Indica si el sistema puede crear una instancia del proveedor de contenido. Es "true" si es posible y "false" si no lo es. El valor predeterminado es "true".

El elemento <application> tiene su propio atributo enabled, que se aplica a todos los componentes de la aplicación, incluidos los proveedores de contenido. Los atributos <application> y <provider> deben ser "true", ya que ambos son valores predeterminados para que se habilite el proveedor de contenido. Si cualquiera de los dos atributos es "false", se inhabilita al proveedor. No se puede crear una instancia.

android:directBootAware

Indica si el proveedor de contenido reconoce el inicio directo, es decir, si puede ejecutarse antes de que el usuario desbloquee el dispositivo.

Nota: Durante el inicio directo, un proveedor de contenido de tu aplicación puede acceder solamente a los datos que se almacenan en el almacenamiento protegido del dispositivo.

El valor predeterminado es "false".

android:exported
Indica si el proveedor de contenido está disponible para que lo usen otras aplicaciones:
  • "true": El proveedor de contenido está disponible para otras aplicaciones. Cualquier aplicación puede usar el URI de contenido del proveedor para acceder a este, de acuerdo con los permisos especificados para el proveedor.
  • "false": El proveedor no está disponible para otras aplicaciones. Configura android:exported="false" para limitar el acceso del proveedor a tus aplicaciones. Solo las aplicaciones que tienen el mismo ID de usuario (UID) que el proveedor o aquellas a las que se les otorgó acceso temporal al proveedor mediante el elemento android:grantUriPermissions pueden acceder a este.

Como este atributo se introdujo en el nivel de API 17, todos los dispositivos que ejecutan el nivel de API 16 o versiones anteriores se comportan como si este atributo estuviera configurado en "true". Si configuras la android:targetSdkVersion en 17 o una versión posterior, el valor predeterminado es "false" para los dispositivos que ejecutan el nivel de API 17 o una versión posterior.

Puedes configurar android:exported="false" y aun así limitar el acceso a tu proveedor estableciendo permisos con el atributo permission.

android:grantUriPermissions
Indica si aquellos que normalmente no tienen permiso para acceder a los datos del proveedor de contenido pueden obtener permiso o no, de manera que se anule temporalmente la restricción que imponen los atributos readPermission, writePermission, permission y exported.

Es "true" si se puede otorgar permiso y "false" si no se puede otorgar. Si es "true", se puede otorgar permiso a cualquier dato del proveedor de contenido. Si es "false", el permiso solamente se puede otorgar a los subconjuntos de datos que se enumeran en los subelementos <grant-uri-permission>, si los hay. El valor predeterminado es "false".

Otorgar permiso es una manera de permitir a un componente de la aplicación acceder a datos protegidos por un permiso. Por ejemplo, cuando un mensaje de correo electrónico contiene un archivo adjunto, la aplicación de correo electrónico puede indicar al visor apropiado que lo abra incluso si este no tiene un permiso general para ver los datos del proveedor de contenido.

En esos casos, las marcas FLAG_GRANT_READ_URI_PERMISSION y FLAG_GRANT_WRITE_URI_PERMISSION en el objeto del Intent que activa el componente otorgan el permiso. Por ejemplo, la aplicación de correo electrónico podría agregar FLAG_GRANT_READ_URI_PERMISSION en el Intent que se pasa a Context.startActivity(). El permiso es específico del URI en el Intent.

Si habilitas esta función, ya sea estableciendo este atributo en "true" o definiendo subelementos <grant-uri-permission>, llama a Context.revokeUriPermission() cuando se borre un URI cubierto del proveedor.

Consulta también el elemento <grant-uri-permission>.

android:icon
Es un ícono que representa un proveedor de contenido. Este atributo se establece como referencia a un recurso de elementos de diseño que contiene la definición de la imagen. Si no está configurado, en su lugar se usa el ícono especificado para toda la aplicación. Para obtener más información, consulta el atributo icon del elemento <application>.
android:initOrder
Es el orden en el que se deben crear instancias del proveedor de contenido, en relación con otros proveedores de contenido que aloja el mismo proceso. Cuando hay dependencias entre los proveedores de contenido, establecer este atributo para cada una de ellas garantiza que se creen en el orden que requieran esas dependencias. El valor es un número entero. Los números más altos se inicializan primero.
android:label
Es una etiqueta legible por el usuario para el contenido que se proporciona. Si no se establece este atributo, en su lugar se usa la etiqueta configurada para toda la aplicación. Para obtener más información, consulta el atributo label del elemento <application>.

La etiqueta debe establecerse como una referencia a un recurso de string de manera que pueda localizarse como otras strings en la interfaz de usuario. Sin embargo, para tu conveniencia durante el desarrollo de la aplicación, también se puede establecer como string sin procesar.

android:multiprocess
Si la app se ejecuta en varios procesos, este atributo determina si se crean o no varias instancias del proveedor de contenido. Si su valor es "true", cada uno de los procesos de la app tiene su propio proveedor de contenido. Si es "false", los procesos de la app comparten solo un objeto de proveedor de contenido. El valor predeterminado es "false".

Establecer esta marca en "true" podría mejorar el rendimiento, ya que se reduce la sobrecarga de comunicación entre procesos, pero también aumenta el espacio en memoria de cada proceso.

android:name
Es el nombre de la clase que implementa el proveedor de contenido, una subclase de ContentProvider. Por lo general, es un nombre de clase completamente calificado, como "com.example.project.TransportationProvider". Sin embargo, como atajo, si el primer carácter del nombre es un punto, se agregará al nombre del paquete especificado en el elemento <manifest>.

No hay ningún valor predeterminado. Se debe especificar el nombre.

android:permission
Es el nombre de un permiso que deben tener los clientes para leer o escribir los datos del proveedor de contenido. Este atributo es una forma conveniente de configurar un único permiso de lectura y escritura. Sin embargo, los atributos readPermission, writePermission y grantUriPermissions tienen prioridad sobre este.

Si también se configura el atributo readPermission, este controla el acceso para realizar consultas al proveedor de contenido. Si se configura el atributo writePermission, este controla el acceso para modificar los datos del proveedor.

Si deseas obtener más información sobre los permisos, consulta la sección Permisos en la descripción general del manifiesto de la app y las Sugerencias de seguridad.

android:process
Es el nombre del proceso en el que se ejecuta el proveedor de contenido. Por lo general, todos los componentes de una aplicación se ejecutan en un proceso predeterminado que se crea para la aplicación. Tiene el mismo nombre que el paquete de la aplicación.

El atributo process del elemento <application> puede establecer un valor predeterminado diferente para todos los componentes. Sin embargo, cada componente puede anular el valor predeterminado con su propio atributo process, lo que te permite repartir tu aplicación entre varios procesos.

Si el nombre asignado a este atributo comienza con dos puntos (:), cuando es necesario, se crea un nuevo proceso, que es privado para la aplicación, y la actividad se ejecuta en ese proceso.

Si el nombre del proceso comienza con un carácter en minúscula, la actividad se ejecutará en un proceso global con ese nombre siempre que tenga permiso para hacerlo. De esta manera, los componentes de diferentes aplicaciones pueden compartir un mismo proceso, lo que reduce el uso de recursos.

android:readPermission

Es un permiso que los clientes deben tener para realizar consultas al proveedor de contenido.

Si el proveedor establece android:grantUriPermissions en "true", o si un determinado cliente cumple con las condiciones de un subelemento <grant-uri-permission>, el cliente puede obtener acceso de lectura temporal a los datos del proveedor de contenido.

Consulta también los atributos permission y writePermission.

android:syncable
Determina si los datos bajo el control del proveedor de contenido se pueden sincronizar con datos en un servidor. Es "true" si es posible y "false" si no lo es.
android:writePermission

Es un permiso que los clientes necesitan para realizar cambios en los datos que controla el proveedor de contenido.

Si el proveedor establece android:grantUriPermissions en "true", o si un cliente cumple con las condiciones de un subelemento <grant-uri-permission>, el cliente puede obtener acceso de escritura temporal para modificar los datos del proveedor de contenido.

Consulta también los atributos permission y readPermission.

primera inclusión:
Nivel de API 1
consulta también:
Proveedores de contenido