- Sintaxe:
-
<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>
- contido em:
-
<application>
- pode conter:
<meta-data>
<grant-uri-permission>
<intent-filter>
<path-permission>
- descrição:
-
Declara o componente de um provedor de conteúdo. Um provedor de conteúdo é uma subclasse do
ContentProvider
que oferece acesso estruturado aos dados gerenciados pelo aplicativo. Todos os provedores de conteúdo do seu aplicativo precisam ser definidos em um elemento<provider>
no arquivo de manifesto. Caso contrário, o sistema não saberá da existência deles e eles não serão executados.Declare somente os provedores de conteúdo que fazem parte do seu aplicativo. Não declare provedores de conteúdo em outros aplicativos que você usa no seu.
O sistema Android armazena referências a provedores de conteúdo de acordo com uma string de autoridade, que faz parte do URI de conteúdo do provedor. Por exemplo, suponha que você queira acessar um provedor de conteúdo que armazena informações sobre profissionais de saúde. Para fazer isso, chame o método
ContentResolver.query()
, que usa um URI que identifica o provedor, entre outros argumentos:content://com.example.project.healthcareprovider/nurses/rn
O esquema
content:
identifica o URI como um URI de conteúdo que aponta para um provedor de conteúdo do Android. A autoridadecom.example.project.healthcareprovider
identifica o próprio provedor. O sistema Android procura a autoridade na lista de provedores conhecidos e das autoridades deles. A substringnurses/rn
é um caminho, que o provedor de conteúdo usa para identificar subconjuntos dos dados do provedor.Ao definir seu provedor no elemento
<provider>
, você não inclui o esquema nem o caminho no argumentoandroid:name
, apenas a autoridade.Para informações sobre como usar e desenvolver provedores de conteúdo, consulte Provedores de conteúdo.
- atributos:
-
android:authorities
-
Lista de uma ou mais autoridades de URI que identificam dados oferecidos pelo provedor de conteúdo.
Liste várias autoridades separando os nomes delas com ponto e vírgula.
Para evitar conflitos, use uma convenção de nomenclatura no estilo Java para nomes de autoridades,
como
com.example.provider.cartoonprovider
. Normalmente, é o nome da subclasseContentProvider
que implementa o provedorNão há padrão. Pelo menos uma autoridade precisa ser especificada.
android:enabled
- Define se o provedor de conteúdo pode ser instanciado pelo sistema ou não. Será
"true"
se isso for possível, e"false"
se não for. O valor padrão é"true"
.O elemento
<application>
tem o próprio atributoenabled
que se aplica a todos os componentes do aplicativo, incluindo provedores de conteúdo. Os atributos<application>
e<provider>
precisam ser"true"
porque ambos são padrão para que o provedor de conteúdo seja ativado. Se um deles for"false"
, o provedor será desativado. Ele não poderá ser instanciado. android:directBootAware
Define se o provedor de conteúdo tem reconhecimento de inicialização direta, ou seja, se ele pode ser executado antes de o usuário desbloquear o dispositivo.
Observação: durante a inicialização direta, um provedor de conteúdo no seu aplicativo só pode acessar os dados no armazenamento protegido do dispositivo.
O valor padrão é
"false"
.android:exported
-
Se o provedor de conteúdo está ou não disponível para outros aplicativos usarem.
-
"true"
: o provedor está disponível para outros aplicativos. Qualquer aplicativo pode usar o URI de conteúdo do provedor para o acessar, de acordo com as permissões especificadas para esse provedor. -
"false"
: o provedor não está disponível para outros aplicativos. Definaandroid:exported="false"
para limitar o acesso do provedor aos seus aplicativos. Apenas aplicativos que têm o mesmo ID do usuário (UID) do provedor ou aplicativos que receberam acesso temporário ao provedor usando o elementoandroid:grantUriPermissions
têm acesso a ele.
Como esse atributo foi introduzido na API de nível 17, todos os dispositivos que executam a API de nível 16 e anteriores se comportam como se esse atributo estivesse definido como
"true"
. Se você definirandroid:targetSdkVersion
como 17 ou mais recente, o valor padrão vai ser"false"
para dispositivos com API de nível 17 ou mais recente.Você pode definir
android:exported="false"
e ainda limitar o acesso ao provedor, configurando permissões com o atributopermission
. -
android:grantUriPermissions
- Define se aqueles que originalmente não teriam permissão para
acessar os dados do provedor de conteúdo vão receber ou não permissão para isso,
superando temporariamente a restrição imposta pelos
atributos
readPermission
,writePermission
,permission
eexported
.Será
"true"
se a permissão puder ser concedida e"false"
se não puder. Se for"true"
, a permissão poderá ser concedida a qualquer dado do provedor de conteúdo. Se for"false"
, a permissão poderá ser concedida apenas aos subconjuntos de dados listados nos subelementos<grant-uri-permission>
, se houver. O valor padrão é"false"
.A permissão é uma forma de conceder ao componente do aplicativo um acesso único aos dados protegidos por uma permissão. Por exemplo, quando um e-mail contém um anexo, o aplicativo de e-mail pode chamar o visualizador adequado para abri-lo, mesmo que o visualizador não tenha permissão geral para analisar todos os dados do provedor de conteúdo.
Nesses casos, a permissão é concedida pelas flags
FLAG_GRANT_READ_URI_PERMISSION
eFLAG_GRANT_WRITE_URI_PERMISSION
no objetoIntent
que ativa o componente. Por exemplo, o aplicativo de e-mail pode colocarFLAG_GRANT_READ_URI_PERMISSION
naIntent
transferida paraContext.startActivity()
. A permissão é específica para o URI daIntent
.Se você ativar esse recurso, definindo esse atributo como
"true"
ou definindo subelementos de<grant-uri-permission>
, chameContext.revokeUriPermission()
quando um URI coberto for excluído do provedor.Consulte também o elemento
<grant-uri-permission>
. android:icon
- Um ícone que representa o provedor de conteúdo.
Esse atributo é definido como uma referência a um recurso drawable que contém
a definição da imagem. Se ele não for definido, o ícone especificado para o aplicativo
como um todo será usado. Para saber mais, consulte o
atributo
icon
do elemento<application>
. android:initOrder
- Ordem na qual o provedor de conteúdo é instanciado, em relação a outros provedores de conteúdo hospedados pelo mesmo processo. Quando há dependências entre os provedores de conteúdo, definir esse atributo para cada um deles garante que eles sejam criados na ordem exigida por essas dependências. O valor é um número inteiro, com números mais altos sendo inicializados primeiro.
android:label
- Rótulo legível pelo usuário para o conteúdo fornecido.
Se esse atributo não for definido, o rótulo definido para o aplicativo como um todo
vai ser usado. Para saber mais, consulte o atributo
label
do elemento<application>
.O rótulo costuma ser definido como referência a um recurso de string, para que possa ser localizado da mesma forma que as outras strings da interface do usuário. No entanto, para facilitar o desenvolvimento do aplicativo, ele também pode ser definido como uma string bruta.
android:multiprocess
- Se o app é executado em vários processos, esse atributo determina se
várias instâncias do provedor de conteúdo vão ser criadas. Se for
"true"
, cada processo do app vai ter o próprio objeto de provedor de conteúdo. Se for"false"
, os processos do app vão compartilhar apenas um objeto do provedor de conteúdo. O valor padrão é"false"
.Definir essa flag como
"true"
pode melhorar a performance e reduzir a sobrecarga da comunicação entre processos, mas também aumenta o consumo de memória de cada processo. android:name
- O nome da classe que implementa o provedor de conteúdo, uma subclasse de
ContentProvider
. Esse geralmente é um nome de classe totalmente qualificado, como"com.example.project.TransportationProvider"
. No entanto, como abreviação, se o primeiro caractere do nome for um ponto, ele será anexado ao nome do pacote especificado no elemento<manifest>
.Não há padrão. O nome precisa ser especificado.
android:permission
- O nome de uma permissão que os clientes precisam ter para ler ou gravar os
dados do provedor de conteúdo. Esse atributo é uma maneira conveniente de definir
uma única permissão para leitura e gravação. No entanto, os
atributos
readPermission
,writePermission
egrantUriPermissions
têm precedência em relação a esse.Se o atributo
readPermission
também for definido, ele vai controlar o acesso para consultar o provedor de conteúdo. Se o atributowritePermission
for definido, ele vai controlar o acesso para modificar os dados do provedor.Para saber mais sobre permissões, consulte a seção Permissões na visão geral do manifesto do app e as Dicas de segurança.
android:process
- O nome do processo em que o provedor de conteúdo é executado. Normalmente,
todos os componentes de um aplicativo são executados no processo padrão criado para
ele. Ele tem o mesmo nome do pacote do aplicativo.
O atributo
process
do elemento<application>
pode definir um padrão diferente para todos os componentes. No entanto, cada componente pode substituir o padrão com o próprio atributoprocess
, permitindo distribuir seu aplicativo em vários processos.Se o nome atribuído a esse atributo começar com dois-pontos (
:
), um novo processo, particular ao aplicativo, será criado quando necessário, e a atividade será executada nesse processo.Se o nome do processo começar com um caractere em letra minúscula, a atividade será executada em um processo global com esse nome, desde que tenha permissão. Isso permite que os componentes de diferentes aplicativos compartilhem um processo, reduzindo o uso de recursos.
android:readPermission
Permissão que os clientes precisam ter para consultar o provedor de conteúdo.
Se o provedor definir
android:grantUriPermissions
como"true"
, ou se um determinado cliente satisfizer as condições de um subelemento<grant-uri-permission>
, o cliente vai poder ter acesso de leitura temporário aos dados do provedor de conteúdo.Consulte também os atributos
permission
ewritePermission
.android:syncable
- Define se os dados sob o controle do provedor de conteúdo
podem ser sincronizados com os dados em um servidor. Será
"true"
se isso for possível, e"false"
se não for. android:writePermission
Uma permissão de que os clientes precisam para fazer alterações nos dados controlados pelo provedor de conteúdo.
Se o provedor definir
android:grantUriPermissions
como"true"
ou se determinado cliente satisfizer as condições de um subelemento<grant-uri-permission>
, o cliente vai poder ter acesso de gravação temporário aos dados do provedor de conteúdo.Consulte também os atributos
permission
ereadPermission
.
- introduzido no:
- Nível 1 da API
- confira também:
- Provedores de conteúdo
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2024-08-22 UTC.
[null,null,["Última atualização 2024-08-22 UTC."],[],[]]