Sobes.tech
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 CursorLoader para carregar dados de forma assíncrona na interface de utilizador, e SyncAdapter para 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" />