📷 Cap 14: Captura QR: Scanner de Itens

🎯 Objetivo da Aula: Ao final desta aula, você saberá usar a câmera do celular no seu app. Você aprenderá a integrar o Google ML Kit para ler QR Codes, permitindo que o jogador escaneie códigos no mundo real para ganhar itens no jogo.


🏢 O Cenário Prático (Seu Desafio): Você quer criar um evento de “Caça ao Tesouro”. O desafio é fazer o celular identificar quando o jogador aponta a câmera para um QR Code específico. Se o código for POKE_BOLA, o app deve dar o item para o jogador.


🧠 Fundamentos: A Teoria Traduzida

📖 Dicionário do Programador

  • CameraX: É a biblioteca oficial do Google para facilitar o uso da câmera.
  • ML Kit: É o “Cérebro” de visão do Google. Ele consegue ler textos, rostos e QR Codes.
  • Permissões: Por segurança, o Android proíbe o uso da câmera sem que o usuário autorize. Você precisa pedir “licença” no arquivo de manifesto.

🎨 Padrão de Permissões

Todas as permissões do sistema devem ser declaradas no arquivo AndroidManifest.xml antes de serem usadas no código Kotlin.

graph TD
    A[Usuário abre Câmera] --> B{Tem Permissão?}
    B -->|Não| C[Mostra Janela de Pedido]
    B -->|Sim| D[Abre Scanner QR]

🏗️ Construindo o Projeto (Checklist Studio)

No seu arquivo AndroidManifest.xml, adicione esta linha antes da tag <application>: <uses-permission android:name="android.permission.CAMERA" />


📖 Exemplo Passo a Passo: O Verificador de Itens

Crie uma função simples para validar o que a câmera leu:

fun processarCodigo(textoLido: String) {
    if (textoLido == "POKE_BOLA") {
        println("📦 Você ganhou uma Pokebola!")
    } else {
        println("❌ Código inválido ou item desconhecido.")
    }
}

🛠️ Prática Obrigatória 1: Abra o arquivo AndroidManifest.xml do seu projeto e adicione a permissão de câmera. Pesquise e anote qual a dependência do ML Kit Barcode Scanning que deve ser colocada no build.gradle.


🛠️ Prática Obrigatória 2: Crie uma função chamada validarIngresso. Se o texto lido for "VIP", o retorno deve ser "Acesso Liberado". Senão, o retorno deve ser "Acesso Negado".


🔑 Gabarito Passo a Passo:

Exercício 1 (Dependência): implementation("com.google.mlkit:barcode-scanning:17.2.0")

Exercício 2:

fun validarIngresso(codigo: String): String {
    return if (codigo == "VIP") {
        "Acesso Liberado"
    } else {
        "Acesso Negado"
    }
}

📤 Instruções de Entrega (Microsoft Teams):

  1. Envie o print do seu Manifesto com a permissão.
  2. Envie o código da função de validação.
  3. Submeta no canal de tarefas.

Capitulo Anterior | Proximo Capitulo