🚀 4.7 Compartilhando Dados com Content Providers
Os Content Providers (Provedores de Conteúdo) são um dos quatro pilares fundamentais do Android. Eles permitem o compartilhamento seguro de dados entre diferentes aplicações, abstraindo a origem da informação — seja ela um banco de dados Room, arquivos locais ou uma API remota.
O Papel do Content Provider
Imagine o aplicativo de Contatos ou a Galeria de Fotos do Android. Eles expõem seus dados para que seu app possa consultá-los sem precisar de acesso direto aos arquivos internos desses sistemas. O ContentProvider se responsabiliza por:
- Segurança: Garante que apenas apps autorizados acessem os dados.
- Abstração: Seu app acessa os dados através de uma interface tabular (Cursor), sem se importar se por baixo existe um SQLite ou um arquivo XML.
- Independência: O app que consome os dados não precisa saber como os dados são armazenados, apenas onde (através de uma URI).
Consumindo Dados: O ContentResolver
Para interagir com um provedor externo, não instanciamos o ContentProvider diretamente. Em vez disso, utilizamos o ContentResolver, obtido através do contexto da Activity ou Service:
var resolver = getContentResolver();Arquitetura de Comunicação
graph LR subgraph app_cliente [App Cliente] A[Activity] --> B[ContentResolver] end subgraph sistema_android [Sistema Android] B --> C{ContentProvider} end subgraph app_servidor_provedor [App Servidor Provedor] C --> D["(Data Store / Room)"] end
IMPORTANT
Permissões em Tempo de Execução: Desde o Android 6.0 (API 23), não basta declarar o uso de um Content Provider no
AndroidManifest. O usuário deve conceder permissão explicitamente durante o uso do app para que oContentResolverconsiga acessar dados sensíveis como Contatos ou Localização.
TIP
Em muitos casos modernos, o compartilhamento de arquivos simples é feito de forma mais eficiente através do FileProvider, uma subclasse especializada de
ContentProviderque evita a exposição de caminhos reais do sistema de arquivos (file://).