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

📷 P08: Batalha Scanner (QR Code Catch com CameraX)

v1.0 — Android Jetpack CameraX, ML Kit Barcode Scanning, Processamento de Imagens em Tempo Real e Mecânica de Captura

Série Prática Android Clássico — Projeto 8 de 21


🏛️ Visão Geral & Arquitetura Visual

O projeto Batalha Scanner conecta o mundo físico ao ambiente virtual do jogo através do processamento óptico de códigos bidimensionais. Utilizando a biblioteca moderna Jetpack CameraX em conjunto com a API de ML Kit Barcode Scanning, o aplicativo gerencia o fluxo de vídeo da câmera traseira em tempo real no componente PreviewView, analisa frames assincronamente com ImageAnalysis e decodifica QR Codes para disparar batalhas e capturar criaturas.

Fluxo Visual de Telas do Batalha Scanner

📁 Estrutura de Pastas Anti-Colisão

Todos os serviços de câmera, analisadores de frames e interfaces residem na subpasta canônica mobile-android-kotlin/:

catalogo_projetos/android_p08_scanner_camerax/
├── assets/
│   ├── mockup_fluxo_telas.svg
│   ├── mockup_como_jogar.svg
│   ├── screenshot_01_permissao.svg
│   ├── screenshot_02_scanner_ativo.svg
│   ├── screenshot_03_batalha.svg
│   └── screenshot_04_gerador_pokeapi.svg
├── mobile-android-kotlin/
│   ├── app/
│   │   ├── src/
│   │   │   └── main/
│   │   │       ├── java/br/com/curso/batalhascanner/
│   │   │       │   ├── camera/
│   │   │       │   │   └── QrCodeAnalyzer.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 Jogador Quero autorizar o acesso à câmera de forma clara através do diálogo de permissão em tempo de execução. Solicitação nativa via ActivityResultContracts.RequestPermission. Alta
US-02 Jogador Quero apontar a câmera para um QR Code e ter a leitura realizada em fração de segundo. Detecção automática pelo analisador ML Kit sem necessidade de tirar foto. Alta
US-03 Jogador Quero ver uma mira com linhas neon sobre o leitor para enquadrar o código com precisão. Overlay visual desenhado sobre o PreviewView do CameraX. Média
US-04 Jogador Quero que a tela mude para a arena de batalha imediatamente após a decodificação bem-sucedida. Transição fluida para a tela de confronto com os dados da criatura lida. Média
US-05 Desenvolvedor Mobile Quero liberar os recursos do hardware de câmera ao fechar o app para economizar bateria. Encerramento automático dos casos de uso atrelados ao ciclo de vida da Activity. Baixa

2. Requisitos do Sistema

Requisitos Funcionais (RF)

Requisitos Não-Funcionais (RNF)


3. Diagrama de Casos de Uso

flowchart TD
    Player([fa:fa-user Jogador])
    Cam[(fa:fa-camera Hardware CameraX)]
    MLKit[(fa:fa-barcode ML Kit Barcode)]

    subgraph AppScanner ["📷 Batalha Scanner (mobile-android-kotlin)"]
        UC01["Solicitar Permissão de Câmera"]
        UC02["Exibir PreviewView em Tempo Real"]
        UC03["Analisar Frame de Vídeo"]
        UC04["Decodificar QR Code"]
        UC05["Iniciar Duelo de Criaturas"]
    end

    Player --> UC01
    UC01 -->|Concedida| UC02
    UC02 --> Cam
    Cam --> UC03
    UC03 --> MLKit
    MLKit -->|Payload Válido| UC04
    UC04 --> UC05

4. Matriz de Rastreabilidade (RTM)

ID Requisito História de Usuário Artefato de Código Teste de Aceitação
RF-01 US-01 mobile-android-kotlin/app/.../MainActivity.kt testCameraPermissionRequest()
RF-02 US-05 mobile-android-kotlin/app/.../MainActivity.kt testCameraProviderLifecycleBinding()
RF-03 US-02 mobile-android-kotlin/app/src/main/res/layout/activity_main.xml testPreviewViewInflated()
RF-04 US-02 mobile-android-kotlin/app/.../QrCodeAnalyzer.kt testImageAnalysisKeepOnlyLatest()
RF-05 US-02, US-04 mobile-android-kotlin/app/.../QrCodeAnalyzer.kt testMLKitBarcodeDetection()

🛠️ Implementação Guiada (QrCodeAnalyzer.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_p08_scanner_camerax/mobile-android-kotlin

2. Compile e instale em dispositivo físico com câmera

./gradlew installDebug

🏁 Matriz de Checkpoints de Conclusão

Checkpoint Meta Técnica Critério de Aceite Status
CP-01 Permissão Dinâmica Fluxo de solicitação de permissão de câmera funcional PASS ✅
CP-02 Inicialização do CameraX PreviewView exibindo o feed da câmera a 30/60 FPS PASS ✅
CP-03 Integração com ML Kit Leitura óptica de QR Codes com payload retornado PASS ✅
CP-04 Transição de Tela Abertura automática da tela de confronto pós-leitura PASS ✅
CP-05 Suíte de Testes Automatizados Testes de unidade e instrumentação aprovados com 100% de sucesso PASS ✅