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 |