📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados na Especialização em Android Nativo. Recomendado revisar antes de iniciar.
v1.0 — Android Nativo, Kotlin, BroadcastReceiver Dinâmico e Estático, AlarmManager com Alarmes Exatos e Disparo do Bat-Sinal
Série Prática Android Clássico — Projeto 16 de 21
- P15: J.A.R.V.I.S. Sync com WorkManager
- ➡️ P16 (este): Alerta Gotham com Broadcast & Alarmes
- P17: Anime Soundboard com MediaPlayer
- P18: Radar de Habilidades com Canvas 2D
- P19: Banco de Wakanda com MVVM & Room
O projeto Alerta Gotham domina o sistema de comunicação por difusão de eventos (event broadcasting) e agendamento temporal de alta precisão no Android. A aplicação implementa BroadcastReceiver dinâmico e contextual para capturar alterações de estado do hardware (bateria fraca, conexão de fone de ouvido, modo avião) e orquestra o AlarmManager com alarmes exatos (setExactAndAllowWhileIdle) para projetar o Bat-Sinal nos céus de Gotham no horário exato de patrulha programado pelo Comissário Gordon.
Os receptores de transmissão, agendadores de alarme e layouts residem na subpasta canônica mobile-android-kotlin/:
catalogo_projetos/android_p16_gotham_broadcast/
├── assets/
│ ├── mockup_gotham_fluxo.svg
│ ├── screenshot_01_gotham_painel.svg
│ ├── screenshot_02_gotham_armado.svg
│ └── screenshot_03_gotham_notificacao.svg
├── mobile-android-kotlin/
│ ├── app/
│ │ ├── src/
│ │ │ └── main/
│ │ │ ├── java/br/com/curso/alertagotham/
│ │ │ │ ├── receiver/
│ │ │ │ │ └── BatSinalReceiver.kt
│ │ │ │ └── MainActivity.kt
│ │ │ └── res/
│ │ └── build.gradle
│ ├── gradle/
│ ├── build.gradle
│ ├── gradlew
│ ├── settings.gradle
│ └── README.md
└── index.md
| ID | Persona | Narrativa da Funcionalidade | Critério de Aceitação Principal | Prioridade |
|---|---|---|---|---|
| US-01 | Comissário Gordon | Quero agendar o acionamento do Bat-Sinal para um horário exato no futuro. | Agendamento de alarme exato através do AlarmManager nativo. | Alta |
| US-02 | Batman / Usuário | Quero receber notificação de alta prioridade quando o alarme do Bat-Sinal disparar. | Execução garantida mesmo com o celular em descanso (Doze Mode). | Alta |
| US-03 | Batman / Usuário | Quero ser alertado caso o nível de energia do dispositivo caia abaixo de 15%. | Recepção do broadcast do sistema Intent.ACTION_BATTERY_LOW. |
Alta |
| US-04 | Desenvolvedor Mobile | Quero registrar e desregistrar receivers contextuais de forma balanceada. | Registro no onStart() e cancelamento no onStop() para evitar memory leaks. |
Média |
| US-05 | Engenheiro de QA | Quero testar o disparo do alarme forçando comandos de teste via ADB. | Compatibilidade com testes de transmissão via terminal. | Baixa |
BroadcastReceiver com tratamento do callback onReceive().AlarmManager com setExactAndAllowWhileIdle() garantindo execução no Doze Mode.PendingIntent.getBroadcast() com flag imutável.SCHEDULE_EXACT_ALARM em APIs modernas.onReceive (< 10 segundos).flowchart TD
Gordon([fa:fa-user Comissário Gordon])
Alarm[(fa:fa-clock AlarmManager)]
Receiver[(fa:fa-tower-broadcast BatSinalReceiver)]
Notif[(fa:fa-bell Notificação de Emergência)]
subgraph AppGotham ["🚨 Alerta Gotham (mobile-android-kotlin)"]
UC01["Programar Horário de Patrulha"]
UC02["Agendar Alarme Exato no Sistema"]
UC03["Disparar Evento de Broadcast"]
UC04["Emitir Alerta do Bat-Sinal"]
UC05["Cancelar Alarme Ativo"]
end
Gordon --> UC01
UC01 --> UC02
UC02 --> Alarm
Alarm -.->|Tempo Atingido| UC03
UC03 --> Receiver
Receiver --> UC04
UC04 --> Notif
Gordon --> UC05
UC05 --> Alarm
| ID Requisito | História de Usuário | Artefato de Código | Teste de Aceitação |
|---|---|---|---|
| RF-01 | US-02 | mobile-android-kotlin/app/.../BatSinalReceiver.kt |
testBroadcastReceiverOnReceive() |
| RF-02 | US-01 | mobile-android-kotlin/app/.../MainActivity.kt |
testAlarmManagerSetExact() |
| RF-03 | US-01, US-02 | mobile-android-kotlin/app/.../MainActivity.kt |
testPendingIntentBroadcastFlag() |
| RF-04 | US-03, US-04 | mobile-android-kotlin/app/.../MainActivity.kt |
testDynamicReceiverRegistration() |
| RF-05 | US-05 | mobile-android-kotlin/app/.../MainActivity.kt |
testCancelScheduledAlarm() |
BatSinalReceiver.kt)ℹ️ O trecho de código que ficava aqui não correspondia ao código do projeto e foi retirado. Consulte os arquivos em
mobile-android-kotlin.
cd catalogo_projetos/android_p16_gotham_broadcast/mobile-android-kotlin
./gradlew installDebug
| Checkpoint | Meta Técnica | Critério de Aceite | Status |
|---|---|---|---|
| CP-01 | BroadcastReceiver Registrado | Receptor declarado no Manifesto ou registrado dinamicamente | PASS ✅ |
| CP-02 | Agendamento com AlarmManager | Alarme exato programado sem violação de permissões | PASS ✅ |
| CP-03 | Disparo em Doze Mode | Alarme acionado com sucesso em estado ocioso do sistema | PASS ✅ |
| CP-04 | Recepção de Estado de Energia | Detecção de bateria fraca exibindo alerta preventivo | PASS ✅ |
| CP-05 | Suíte de Testes Automatizados | Testes de unidade do receptor aprovados com 100% de sucesso | PASS ✅ |