<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>
contida em:
<application>
pode conter:
<meta-data>
<grant-uri-permission>
<path-permission>
descrição:
Declara o componente de um provedor de conteúdo. Um provedor de conteúdo é uma subclasse de 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, eles não serão detectados nem executados pelo sistema.

Declare somente os provedores de conteúdo que fazem parte do seu aplicativo. Não declare os provedores de conteúdo de 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, entre outros argumentos, usa um URI que identifica o provedor:

    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 provedor em si. 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 pode usar para identificar subconjuntos dos dados do provedor.

Observe que 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 o guia da API, Provedores de conteúdo.

atributos:
android:authorities
Lista de uma ou mais autoridades de URI que identificam dados oferecidos pelo provedor de conteúdo. Várias autoridades são listadas com os nomes separados por ponto e vírgula. Para evitar conflitos, os nomes de autoridade precisam usar uma convenção de nomeação no estilo Java, 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
Se o provedor de conteúdo pode ou não ser instanciado pelo sistema: "true" se puder, e "false" se não. 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. Tanto o atributo <application> quanto o <provider> precisam ser "true" (ambos são por padrão) para que o provedor de conteúdo seja ativado. Se um dos dois for "false", o provedor será desativado e não poderá ser instanciado.

android:directBootAware

Se o provedor de conteúdo tem ou não reconhecimento da inicialização direta, ou seja, se ele pode ou não 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 acessá-lo, sujeito às 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 do provedor ou aplicativos que receberam acesso temporário ao provedor por meio do 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, o valor padrão será "false" para dispositivos com API de nível 17 ou posterior.

Você pode definir android:exported="false" e ainda limitar o acesso ao provedor configurando permissões com o atributo permission.

android:grantUriPermissions
Se aqueles que originalmente não teriam permissão para acessar os dados do provedor de conteúdo receberão ou não permissão para isso, superando temporariamente a restrição imposta pelos atributos readPermission, writePermission, permission e exported: "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 só poderá ser concedida 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 por sinalizações FLAG_GRANT_READ_URI_PERMISSION e FLAG_GRANT_WRITE_URI_PERMISSION no objeto de intent que ativa o componente. Por exemplo, o aplicativo de e-mail pode colocar FLAG_GRANT_READ_URI_PERMISSION no intent transferido para Context.startActivity(). A permissão é específica para o URI do intent.

Se você ativar esse recurso, definindo esse atributo como “true” ou definindo subelementos <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 precisa ser definido como referência a um recurso drawable que contém a definição de imagem. Se ele não for definido, o ícone especificado para o aplicativo como um todo será usado. Consulte o atributo icon do elemento <application>.
android:initOrder
Ordem na qual o provedor de conteúdo será instanciado, em relação a outros provedores de conteúdo hospedados pelo mesmo processo. Quando houver 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 simples, 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 será usado. Consulte o atributo label do elemento <application>.

O rótulo precisa ser definido como referência a um recurso de string para que possa ser localizado como outras strings na 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 for executado em vários processos, esse atributo determinará se várias instâncias do provedor de conteúdo serão criadas. Se for true, cada processo do app terá o próprio objeto de provedor de conteúdo. Se for false, os processos do app compartilharão apenas um objeto do provedor de conteúdo. O valor padrão é false.

Definir essa sinalização como true pode melhorar o desempenho 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. Precisa ser 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 controlará o acesso para consultar o provedor de conteúdo. E se o atributo writePermission for definido, ele controlará o acesso para modificar os dados do provedor.

Para mais informações sobre permissões, consulte a seção Permissões na introdução e outro documento, chamado Segurança e permissões.

android:process
O nome do processo em que o provedor de conteúdo será 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. Mas cada componente pode modificar o padrão com o próprio atributo process, permitindo que você distribua seu aplicativo em vários processos.

Se o nome atribuído a esse atributo começar com dois-pontos (":"), um novo processo, particular para o aplicativo, será criado quando for necessário e a atividade for executada nesse processo. Se o nome do processo começar com um caractere minúsculo, 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 poderá ter acesso de leitura temporário aos dados do provedor de conteúdo.

Consulte também os atributos permission e writePermission.

android:syncable
Se os dados sob o controle do provedor de conteúdo serão ou não sincronizados com os dados em um servidor: "true" se forem sincronizados, e "false" se não.
android:writePermission

Permissão que os clientes precisam ter para fazer mudanças nos dados controlados pelo 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 poderá ter acesso de gravação temporário aos dados do provedor de conteúdo.

Consulte também os atributos permission e readPermission.

primeira aparição:
API de nível 1
veja também:
Provedores de conteúdo