<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>
<path-permission>
descripción:
Declara el componente del 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, y no los de otras aplicaciones que usas en la tuya.

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, entre otros argumentos, toma un URI que identifica al proveedor:

    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 substring 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 más información sobre cómo usar y desarrollar proveedores de contenido, consulta la Guía de API 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 eI sistema puede crear instancias del proveedor de contenido o no: "true" si es posible y "false" si no. 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. Para habilitar el proveedor de contenido, los atributos <application> y <provider> deben ser "true" (ya que ambos son valores predeterminados). Si cualquiera de los dos es "false", se inhabilita el proveedor y no es posible crear instancias de este.

android:directBootAware

Indica si el proveedor de contenido admite inicio directo o no; es decir, si puede ejecutarse o no antes de que el usuario desbloquee el dispositivo.

Nota: Durante el inicio directo, un proveedor de contenido de tu aplicación solo puede acceder 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 la API nivel 17, todos los dispositivos que ejecutan la API nivel 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 la API nivel 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 ("true" si puede otorgarse permiso y "false" si no). Si es "true", se puede otorgar permiso a cualquier dato del proveedor de contenido. Si es "false", el permiso solo 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>", debes llamar a Context.revokeUriPermission() cuando se borra el 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 debe establecerse como una referencia a un recurso de elemento de diseño que contiene la definición de imagen. Si no está configurado, en su lugar se usa el ícono especificado para toda la aplicació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 (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 puede establecerse 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 quizá mejore el rendimiento, ya que se reduce la sobrecarga de comunicación entre procesos, pero también aumenta el uso de memoria de cada proceso.

android:name
Es el nombre de la clase que implementa el proveedor de contenido, una subclase de ContentProvider. Este debería ser un nombre completo de clase (como "com.example.project.TransportationProvider"). Sin embargo, para abreviar, si el primer carácter del nombre es un punto, este se adjunta al nombre de 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 para 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.

Para obtener más información sobre permisos, consulta la sección Permisos en la introducción y el documento Seguridad y permisos.

android:process
Es el nombre del proceso en el que debe ejecutarse 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. Este 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 tributo 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 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
Indica si los datos que administra el proveedor de contenido deben o no sincronizarse en un servidor ("true" si deben sincronizarse y "false" si no).
android:writePermission

Es un permiso que los clientes deben tener para realizar cambios en los datos que administra 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:
API nivel 1
consulta también:
Proveedores de contenido