🧩 Exercícios - Cap 16: Captura QR: Scanner de Itens
🎯 Antes de começar
No Cap 16 você declarou a permissão de câmera no AndroidManifest.xml, criou validarIngresso (com if/else) e escanearMoeda (verificando "POKE_MOEDA"). Depois de completar as três Práticas, faça o exercício extra abaixo para reconhecer vários itens diferentes em um único scanner, usando when (Cap 05).
💪 Exercício Extra 1: Inventário de Itens via QR com when (20 min)
Objetivo: Praticar when para transformar o rawValue de um código QR em diferentes itens do jogo, em vez de checar apenas um valor com if.
Passos:
- Crie a função
processarItem:fun processarItem(codigo: String): String { return when (codigo) { "POKE_BOLA" -> "📦 Você ganhou uma Pokebola!" "SUPER_BOLA" -> "📦📦 Você ganhou uma Super Bola!" "POKE_MOEDA" -> "🪙 Você ganhou 100 moedas!" else -> "❌ Código não reconhecido." } } - Crie
escanearInventario, baseada emescanearImagem, que chamaprocessarItempara cada código encontrado:fun escanearInventario(imagem: InputImage) { val scanner = BarcodeScanning.getClient() scanner.process(imagem) .addOnSuccessListener { codigosEncontrados -> for (codigo in codigosEncontrados) { val valorLido = codigo.rawValue ?: "" println(processarItem(valorLido)) } } .addOnFailureListener { println("❌ Erro ao ler o código.") } } - Para testar sem câmera, simule os códigos encontrados com uma lista:
val codigosDeTeste = listOf("POKE_BOLA", "SUPER_BOLA", "POKE_MOEDA", "ITEM_RARO") for (c in codigosDeTeste) { println(processarItem(c)) }
✅ Resultado Esperado
📦 Você ganhou uma Pokebola!
📦📦 Você ganhou uma Super Bola!
🪙 Você ganhou 100 moedas!
❌ Código não reconhecido.
🆘 Resolução de Problemas Comuns
| Erro | Causa | Solução |
|---|---|---|
'when' expression must be exhaustive |
Faltou o ramo else -> no when |
Sempre inclua else -> "❌ Código não reconhecido." como último ramo |
Código "poke_bola" (minúsculo) não é reconhecido |
when é sensível a maiúsculas/minúsculas, e o QR Code real pode vir em outro formato |
Padronize com codigo.uppercase() antes do when, ou garanta que os QR Codes gerados usem exatamente "POKE_BOLA" |
Type mismatch nos ramos do when |
Um dos ramos retorna Int ou outro tipo, em vez de String |
Garanta que todos os ramos do when retornem String |