<provider>

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 autoridade com.example.project.healthcareprovider identifica o próprio provedor. O sistema Android procura a autoridade na lista de provedores conhecidos e das autoridades deles. A substring nurses/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 argumento android: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 subclasse ContentProvider que implementa o provedor

Nã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 atributo enabled 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. Defina android: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 elemento android: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ê definir android: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 atributo permission.

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 e exported.

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 e FLAG_GRANT_WRITE_URI_PERMISSION no objeto Intent que ativa o componente. Por exemplo, o aplicativo de e-mail pode colocar FLAG_GRANT_READ_URI_PERMISSION na Intent transferida para Context.startActivity(). A permissão é específica para o URI da Intent.

Se você ativar esse recurso, definindo esse atributo como "true" ou definindo subelementos de <grant-uri-permission>, chame Context.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 e grantUriPermissions 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 atributo writePermission 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 atributo process, 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 e writePermission.

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 e readPermission.

introduzido no:
Nível 1 da API
confira também:
Provedores de conteúdo