📚 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, Injeção de Dependências com Dagger Hilt, SensorManager, Acelerômetro, Giroscópio e HUD Futurista
Série Prática Android Clássico — Projeto 12 de 21
- P11: Guilda dos Heróis com Navigation & Biometria
- ➡️ P12 (este): Batcomputer com Injeção Hilt & Sensores
- P13: TARDIS Panel com DataStore Preferences
- P14: Portais Dimensionais com Notificações Push
- P15: Jarvis com WorkManager em Segundo Plano
O projeto Batcomputer simula o terminal tático do Cavaleiro das Trevas combinando a arquitetura moderna de Injeção de Dependências com Dagger Hilt à telemetria de sensores físicos de hardware do smartphone. A aplicação injeta instâncias desacopladas de SensorManager, processa vetores tridimensionais (eixos X, Y e Z) do Acelerômetro e Giroscópio do aparelho em tempo real e desenha uma interface HUD neon que reage com animações à inclinação, aceleração e impactos físicos.
Os módulos Hilt, serviços de sensores e telas estão contidos na subpasta canônica mobile-android-kotlin/:
catalogo_projetos/android_p12_batcomputer_sensores/
├── assets/
│ ├── mockup_batcomputer_fluxo.svg
│ ├── screenshot_01_batcomputer_hud.svg
│ ├── screenshot_02_sensor_impacto.svg
│ └── screenshot_03_filtro_arkham.svg
├── mobile-android-kotlin/
│ ├── app/
│ │ ├── src/
│ │ │ └── main/
│ │ │ ├── java/br/com/curso/batcomputer/
│ │ │ │ ├── di/
│ │ │ │ │ └── SensorModule.kt
│ │ │ │ ├── sensor/
│ │ │ │ │ └── BatSensorManager.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 | Batman / Usuário Tático | Quero inclinar o celular para qualquer direção e ver o radar tático recalcular os eixos instantaneamente. | Leitura contínua dos dados dos eixos X/Y/Z do acelerômetro a 60 FPS. | Alta |
| US-02 | Batman / Usuário Tático | Quero que o app detecte solavancos ou impactos bruscos (agitar o celular) e dispare um alerta de combate. | Detecção de aceleração vetorial resultante superior a 20 m/s². | Alta |
| US-03 | Desenvolvedor Mobile | Quero injetar o serviço de sensores através do Dagger Hilt para manter o código testável. | Anotação @Inject e módulo @InstallIn(SingletonComponent::class). |
Alta |
| US-04 | Batman / Usuário Tático | Quero ver um visor HUD com tipografia neon verde/azul e linhas de varredura estilo terminal militar. | Renderização de gráficos vetoriais com sombras e degradês escuros. | Média |
| US-05 | Engenheiro de Performance | Quero desregistrar os ouvintes de sensor no onPause para impedir consumo de bateria com tela desligada. |
Execução de sensorManager.unregisterListener() na pausa da Activity. |
Baixa |
@Module provendo instâncias de SensorManager e Sensor.TYPE_ACCELEROMETER.SensorEventListener com taxa de amostragem SENSOR_DELAY_GAME.onPause() e retomar no onResume().flowchart TD
User([fa:fa-user Batman / Usuário Tático])
Sensors[(fa:fa-microchip Hardware Sensores)]
Hilt[(fa:fa-cube Dagger Hilt DI)]
subgraph AppBatcomputer ["🦇 Batcomputer HUD (mobile-android-kotlin)"]
UC01["Injetar SensorManager via Hilt"]
UC02["Registrar Acelerômetro e Giroscópio"]
UC03["Filtrar Ruído de Leitura (Passa-Baixa)"]
UC04["Detectar Gesto de Impacto / Agito"]
UC05["Atualizar Radar Tático Neon"]
end
Hilt --> UC01
UC01 --> UC02
Sensors --> UC02
UC02 --> UC03
UC03 --> UC04
UC03 --> UC05
User --> UC04
UC05 --> User
| ID Requisito | História de Usuário | Artefato de Código | Teste de Aceitação |
|---|---|---|---|
| RF-01 | US-03 | mobile-android-kotlin/app/.../SensorModule.kt |
testHiltSensorInjection() |
| RF-02 | US-01 | mobile-android-kotlin/app/.../BatSensorManager.kt |
testSensorEventListenerRegistered() |
| RF-03 | US-02 | mobile-android-kotlin/app/.../BatSensorManager.kt |
testShakeDetectionThreshold() |
| RF-04 | US-01, US-04 | mobile-android-kotlin/app/.../MainActivity.kt |
testHudIndicatorsUpdated() |
| RF-05 | US-05 | mobile-android-kotlin/app/.../BatSensorManager.kt |
testUnregisterOnPause() |
BatSensorManager.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_p12_batcomputer_sensores/mobile-android-kotlin
./gradlew installDebug
| Checkpoint | Meta Técnica | Critério de Aceite | Status |
|---|---|---|---|
| CP-01 | Injeção de Dependências | Hilt configurado sem erros na geração de código KSP | PASS ✅ |
| CP-02 | Conexão com SensorManager | Acelerômetro emitindo eventos válidos de coordenadas | PASS ✅ |
| CP-03 | Detecção de Impacto | Gesto de tremor (shake) capturado com limiar ajustado | PASS ✅ |
| CP-04 | Pausa Econômica de Bateria | Sensores desconectados no ciclo de vida onPause |
PASS ✅ |
| CP-05 | Suíte de Testes Automatizados | Testes de unidade do gerenciador de sensores aprovados | PASS ✅ |