📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados na Especialização em Android Nativo. Recomendado revisar antes de iniciar.

🚨 P16: Alerta Gotham (Broadcast & Alarmes)

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


🏛️ Visão Geral & Arquitetura Visual

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.

Fluxo Visual do Alerta Gotham com BroadcastReceiver e AlarmManager

📁 Estrutura de Pastas Anti-Colisão

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

🧑‍💼 Engenharia de Software & Especificação Formal

1. Histórias de Usuário (User Stories)

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

2. Requisitos do Sistema

Requisitos Funcionais (RF)

Requisitos Não-Funcionais (RNF)


3. Diagrama de Casos de Uso

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

4. Matriz de Rastreabilidade (RTM)

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()

🛠️ Implementação Guiada (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.


🚀 Como Executar no Laboratório

1. Navegue até a subpasta do projeto

cd catalogo_projetos/android_p16_gotham_broadcast/mobile-android-kotlin

2. Compile e instale no dispositivo

./gradlew installDebug

🏁 Matriz de Checkpoints de Conclusão

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 ✅