🚀 5.6 Reagindo a Eventos do Sistema (BroadcastReceiver)
O BroadcastReceiver é o componente que permite ao seu aplicativo “ouvir” e reagir a eventos do sistema ou de outros apps, mesmo quando não está em execução. Um exemplo clássico é iniciar um serviço de sincronização assim que o celular termina de ligar.
O Evento de Inicialização (BOOT_COMPLETED)
Para que o BoaViagem recupere o agendamento de tarefas após o dispositivo ser reiniciado, precisamos capturar o evento BOOT_COMPLETED.
1. Declaração no Manifesto
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver android:name=".receiver.StartupReceiver" android:exported="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>2. Implementação do Receiver (Java 17)
No Android moderno, o BroadcastReceiver deve ser o mais rápido possível. Em vez de iniciar um Service pesado, ele deve disparar um WorkManager:
public class StartupReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
// Reagenda as tarefas de sincronização usando WorkManager
var workRequest = new OneTimeWorkRequest.Builder(SincronizacaoWorker.class).build();
WorkManager.getInstance(context).enqueue(workRequest);
}
}
}CAUTION
Restrições de Background (Android 8.0+): Você não pode mais iniciar um serviço de background comum (
startService) diretamente de umBroadcastReceiver. O sistema lançará uma exceção. Utilize sempre o WorkManager ou inicie um Foreground Service se a tarefa for crítica e visível.
5.7 Conclusão do Módulo
Neste módulo, conectamos nosso aplicativo ao mundo:
- Fundamentos de Rede: Entendemos o padrão REST e o formato JSON.
- Retrofit: Simplificamos o consumo de APIs com interfaces e GSON.
- Concorrência: Substituímos a obsoleta
AsyncTaskpor Executors e WorkManager. - Notificações: Implementamos canais de segurança e PendingIntents imutáveis.
- Broadcasts: Aprendemos a reagir a eventos do sistema de forma eficiente.
No próximo módulo, aprenderemos a fundo como manter os dados locais e remotos sempre em harmonia!