🚀 5.1 Como funciona um Content Provider
O ContentProvider expõe dados para outras aplicações em uma estrutura tabular, semelhante a um banco de dados relacional. Cada linha representa um registro e cada coluna uma propriedade desse registro.
Anatomia de uma URI de Conteúdo
A comunicação com um provedor é feita através de URIs únicas. Elas seguem um padrão rígido que identifica o “dono” do dado e o que está sendo solicitado:
content://br.com.casadocodigo.boaviagem.provider/viagem/1
- Scheme (
content://): Indica que a URI aponta para um provedor de conteúdo. - Authority (
br.com.casadocodigo...): O nome simbólico único do provedor (geralmente o pacote do app). - Path (
viagem): Indica a tabela ou coleção de dados solicitada. - ID (
1): (Opcional) Indica um registro específico dentro da coleção.
O Fluxo de Comunicação
Para acessar os dados, sua Activity utiliza um ContentResolver. Ele atua como um roteador: você entrega uma URI e ele encontra o provedor correspondente no sistema.
// Obtendo o resolver
var resolver = getContentResolver();
// Executando uma consulta (Query)
var cursor = resolver.query(
Viagem.CONTENT_URI,
projection,
selection,
selectionArgs,
sortOrder
);IMPORTANT
MIME Types: Cada URI deve retornar um tipo MIME específico. O Android utiliza padrões como
vnd.android.cursor.dirpara listas evnd.android.cursor.itempara registros únicos. Isso permite que o sistema saiba como tratar o dado retornado.
TIP
No Java 17, o uso de
vartorna o código de manipulação de URIs e Resolvers muito mais limpo, focando no que realmente importa: o acesso ao dado.