Sobes.tech
Middle

Fale sobre receptores e provedores de conteúdo no Android.

sobes.tech IA

Resposta da IA

Os receptores (Broadcast Receivers) reagem a mensagens de difusão do sistema, como notificações de bateria fraca, conexão de rede ou tirar fotos. Não têm interface visual e realizam tarefas em segundo plano.

Existem dois tipos principais:

  • Registados estaticamente: Declarados no AndroidManifest.xml. O sistema inicia a aplicação ao receber o intent correspondente, mesmo que não esteja em execução.
  • Registados dinamicamente: São registados no código usando Context.registerReceiver(). Funcionam apenas enquanto o componente (por exemplo, uma atividade) existir.

Cada receptor implementa o método onReceive(Context context, Intent intent), onde o intent recebido é processado.

Os provedores de conteúdo (Content Providers) gerenciam o acesso comum a dados estruturados. Eles fornecem uma interface padronizada CRUD (Criar, Ler, Atualizar, Apagar) para interagir com dados armazenados em várias fontes (bases de dados SQLite, ficheiros, dados de rede, etc.).

Métodos principais do provedor de conteúdo:

  • onCreate(): Inicializa o provedor.
  • query(): Obtém dados da fonte.
  • insert(): Adiciona novos dados.
  • update(): Atualiza dados existentes.
  • delete(): Remove dados.
  • getType(): Retorna o tipo MIME dos dados para um dado URI.

O acesso ao provedor de conteúdo é feito através de ContentResolver. URI (Identificador de Recurso Unificado) é usado para identificar um conjunto específico de dados.

Exemplo de uso de ContentResolver para consultar dados:

// Uri para a tabela de contactos
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;

String[] projection = {
    ContactsContract.Contacts._ID,
    ContactsContract.Contacts.DISPLAY_NAME
};

// Consulta de dados
Cursor cursor = getContentResolver().query(
    contactsUri,
    projection,
    null, // seleção
    null, // argumentos de seleção
    null  // ordenação
);

if (cursor != null) {
    while (cursor.moveToNext()) {
        long contactId = cursor.getLong(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
        String displayName = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
        // Processamento de dados
    }
    cursor.close();
}

Exemplo de registo de um receptor estático no AndroidManifest.xml:

<receiver
    android:name=".MyBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BATTERY_LOW" />
    </intent-filter>
</receiver>

Exemplo de implementação do receptor:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction() != null && intent.getAction().equals(Intent.ACTION_BATTERY_LOW)) {
            // Ações a realizar em caso de bateria fraca
        }
    }
}

Diferenças principais:

Característica Receptores (Broadcast Receivers) Provedores de conteúdo (Content Providers)
Propósito Reagir a eventos de difusão Gestão do acesso a dados
Interface onReceive() Métodos CRUD via ContentResolver
Visualização Ausente Ausente
Acesso Recebem intents do sistema Fornecem dados mediante solicitação