📷 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)
-
Template: Empty Compose Activity.
-
Name:
AppBattleScanner_SeuNome. -
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.