- 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 autoridadcom.example.project.healthcareprovider
identifica al proveedor. El sistema Android busca la autoridad en su lista de proveedores conocidos y sus autoridades. La subcadenanurses/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 argumentoandroid: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 subclaseContentProvider
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 atributoenabled
, 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. Configuraandroid: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 elementoandroid: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 laandroid: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 atributopermission
. -
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
yexported
.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
yFLAG_GRANT_WRITE_URI_PERMISSION
en el objeto delIntent
que activa el componente otorgan el permiso. Por ejemplo, la aplicación de correo electrónico podría agregarFLAG_GRANT_READ_URI_PERMISSION
en elIntent
que se pasa aContext.startActivity()
. El permiso es específico del URI en elIntent
.Si habilitas esta función, ya sea estableciendo este atributo en
"true"
o definiendo subelementos<grant-uri-permission>
, llama aContext.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
ygrantUriPermissions
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 atributowritePermission
, 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 atributoprocess
, 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
ywritePermission
.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
yreadPermission
.
- primera inclusión:
- Nivel de API 1
- consulta también:
- Proveedores de contenido
El contenido y las muestras de código que aparecen en esta página están sujetas a las licencias que se describen en la Licencia de Contenido. Java y OpenJDK son marcas registradas de Oracle o sus afiliados.
Última actualización: 2024-02-16 (UTC)
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"Falta la información que necesito"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"Muy complicado o demasiados pasos"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"Desactualizado"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"Problema de traducción"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"Problema con las muestras o los códigos"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"Otro"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"Fácil de comprender"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"Resolvió mi problema"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"Otro"
}]
{
"last_modified": "Última actualización: 2024-02-16 (UTC)",
"state": ""
}