📷 P08: Batalha Scanner (QR Code Catch)

Neste projeto, você vai aprender a usar o hardware do celular! Usaremos a câmera e Inteligência Artificial (Google ML Kit) para capturar QR Codes e transformá-los em itens ou batalhas dentro do seu jogo.


🎯 Objetivo do Projeto

Criar uma tela de “Scanner”. Quando o jogador aponta a câmera para um QR Code que contém o texto POKE_BATTLE, o app deve detectar o código e mudar o estado da tela para indicar que uma batalha foi iniciada.


📖 Dicionário do Projeto

  • CameraX: Biblioteca oficial do Android para abrir e controlar a câmera.

  • ML Kit (Barcode Scanning): Ferramenta do Google que “lê” o que a câmera está vendo e identifica códigos de barras e QR Codes.

  • Permissions: A “licença” que o app pede ao Android para usar a câmera. Sem isso, o Android bloqueia o app por segurança.


🏗️ Passo a Passo (Wizard do Android Studio)

  1. Template: Empty Compose Activity.

  2. Name: AppBattleScanner_SeuNome.

  3. Package Name: br.com.curso.battlescanner.


🎨 Parte 1: Pedindo Licença (Manifesto)

Abra o arquivo AndroidManifest.xml e adicione a permissão:

<uses-permission android:name="android.permission.CAMERA" />

No Compose, você precisará usar um launcher para pedir a permissão em tempo de execução!


⚙️ Parte 2: A Lógica do Scanner (ML Kit)

Você criará um “Analisador” que fica vigiando cada quadro da câmera em busca de um QR Code.

val scanner = BarcodeScanning.getClient()
 
// No ImageAnalysis do CameraX:
scanner.process(image)
    .addOnSuccessListener { barcodes ->
        for (barcode in barcodes) {
            val valorLido = barcode.rawValue
            if (valorLido == "POKE_BATTLE") {
                // Iniciar Batalha!
            }
        }
    }

✅ Gabarito Comentado (UI Preview)

No Compose, usamos um AndroidView para mostrar a “janelinha” da câmera ao vivo.

@Composable
fun CameraPreview(onBarcodeDetected: (String) -> Unit) {
    AndroidView(
        factory = { context ->
            val previewView = PreviewView(context)
            // Lógica de iniciar o CameraX e vincular ao LifecycleOwner...
            previewView
        },
        modifier = Modifier.fillMaxSize()
    )
}

📂 Organização de Pastas

br.com.curso.battlescanner MainActivity.kt (Contém a UI, a lógica da câmera e o analisador).


??? Requisitos de Configuração e Solução de Problemas

Se você encontrar erros ao tentar rodar este projeto, verifique os pontos abaixo:

1. Suporte ao AndroidX

O arquivo gradle.properties na raiz do projeto deve conter:

android.useAndroidX=true

android.enableJetifier=true

org.gradle.jvmargs=-Xmx2048m

2. Dependências do CameraX e ML Kit

Certifique-se de adicionar as dependências no build.gradle.