Middle
O que é um Content Provider e como é utilizado no Android?
sobes.tech IA
Resposta da IA
Content Provider — é um dos blocos de construção do Android (componente Application Component), que fornece uma interface padronizada para acessar e gerenciar dados estruturados. Atua como um intermediário entre a aplicação e a fonte de dados (por exemplo, uma base de dados SQLite, ficheiros, dados de rede).
É utilizado para:
- Acesso partilhado a dados: Permite que diferentes aplicações acedam de forma segura aos mesmos dados sem terem acesso direto à fonte de dados subjacente.
- Gestão de permissões: Permite controlar quais aplicações têm acesso aos dados e que operações (leitura, escrita, atualização, eliminação) podem realizar.
- Abstração da fonte de dados: Esconde os detalhes de implementação da fonte de dados dos clientes, simplificando o acesso aos dados.
- Integração com o Framework Android: É utilizado por componentes como
CursorLoaderpara carregar dados de forma assíncrona na interface de utilizador, eSyncAdapterpara sincronizar dados.
Métodos principais do Content Provider:
// Executa uma consulta ao provedor e devolve um Cursor
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder);
// Insere um novo registo no provedor e devolve o URI do novo registo
public Uri insert(Uri uri, ContentValues values);
// Atualiza registos existentes no provedor e devolve o número de linhas atualizadas
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs);
// Elimina registos do provedor e devolve o número de linhas eliminadas
public int delete(Uri uri, String selection, String[] selectionArgs);
// Devolve o tipo MIME dos dados para um URI dado
public String getType(Uri uri);
// Inicializa o provedor aquando da sua criação
public boolean onCreate();
O URI para aceder ao Content Provider tem o seguinte formato:
content://authority/path segment/id
onde:
content://— esquema padrão para Content Providers.authority— cadeia única que identifica o Content Provider (normalmente o nome do pacote da aplicação ou uma parte dele).path segment— parte opcional que indica uma tabela ou conjunto de dados específico.id— parte opcional que indica um registo específico no conjunto de dados.
Exemplo de utilização de ContentResolver para interagir com um Content Provider:
// Obter uma instância de ContentResolver
ContentResolver resolver = getContentResolver();
// URI para aceder aos dados (por exemplo, provedor de contactos do sistema)
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;
// Executar a consulta
Cursor cursor = resolver.query(contactsUri, null, null, null, null);
// Processar o resultado (percorrer o cursor)
if (cursor != null && cursor.moveToFirst()) {
// ... leitura de dados do cursor ...
cursor.close(); // Sempre fechar o cursor!
}
O Content Provider é registado no AndroidManifest.xml:
<provider
android:name=".MyContentProvider"
android:authorities="com.example.myapp.provider"
android:exported="true"
android:readPermission="com.example.myapp.permission.READ_DATA"
android:writePermission="com.example.myapp.permission.WRITE_DATA" />