Permissões em Tempo de Execução, Câmera e GPS
Instruções Gerais:
- Resolva as atividades em ordem progressiva de maturidade.
- Cada nível adiciona requisitos técnicos, tratamento de erros e casos de borda reais.
- Consulte o gabarito comentado ao final de cada questão para autoavaliação.
🎯 Nível 1: Fundamentos
Problema 18.1 — Solicitação de Permissões com rememberPermissionState (Accompanist)
Contexto: Solicitação de Permissões com rememberPermissionState (Accompanist) no contexto de Permissões em Tempo de Execução, Câmera e GPS.
Requisitos de Execução:
- Solicitar permissão de câmera e exibir mensagem caso o acesso seja negado.
Resultado Esperado
Permissão de runtime gerenciada com fluxo declarativo no Compose.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_18_1_SeuNome - Envie na tarefa:
Atividade Cap 18 - Permissões em Tempo de Execução, Câmera e GPS
🔑 Gabarito de Código & Solução Comentada
package com.empresa.mobile.permissions
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@Composable
fun SolicitadorPermissaoCamera(onPermitido: () -> Unit) {
Button(onClick = onPermitido) {
Text("Permitir Acesso a Camera")
}
}
🔍 Nível 2: Prática
Problema 18.2 — Captura de Fotos com ActivityResultContracts.TakePicturePreview()
Contexto: Captura de Fotos com ActivityResultContracts.TakePicturePreview() no contexto de Permissões em Tempo de Execução, Câmera e GPS.
Requisitos de Execução:
- Abrir câmera nativa e recuperar bitmap capturado diretamente no Compose.
Resultado Esperado
Integração nativa com câmera utilizando Activity Result API.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_18_2_SeuNome - Envie na tarefa:
Atividade Cap 18 - Permissões em Tempo de Execução, Câmera e GPS
🔑 Gabarito de Código & Solução Comentada
package com.empresa.mobile.camera
import android.graphics.Bitmap
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.*
@Composable
fun CapturaFotoSimples() {
var fotoBitmap by remember { mutableStateOf<Bitmap?>(null) }
val launcher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.TakePicturePreview()
) { bitmap -> fotoBitmap = bitmap }
Button(onClick = { launcher.launch(null) }) {
Text(if (fotoBitmap != null) "Foto Capturada!" else "Tirar Foto")
}
}
⚡ Nível 3: Integração
Problema 18.3 — Localização Geográfica em Tempo Real com FusedLocationProviderClient
Contexto: Localização Geográfica em Tempo Real com FusedLocationProviderClient no contexto de Permissões em Tempo de Execução, Câmera e GPS.
Requisitos de Execução:
- Obter latitude e longitude atual do dispositivo utilizando Google Play Services Location.
Resultado Esperado
Coordenadas de GPS obtidas com alta precisão.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_18_3_SeuNome - Envie na tarefa:
Atividade Cap 18 - Permissões em Tempo de Execução, Câmera e GPS
🔑 Gabarito de Código & Solução Comentada
package com.empresa.mobile.location
import android.annotation.SuppressLint
import android.content.Context
import com.google.android.gms.location.LocationServices
@SuppressLint("MissingPermission")
fun obterCoordenadasGPS(context: Context, onLocation: (Double, Double) -> Unit) {
val client = LocationServices.getFusedLocationProviderClient(context)
client.lastLocation.addOnSuccessListener { loc ->
if (loc != null) onLocation(loc.latitude, loc.longitude)
}
}
🏆 Nível 4: Desafio Corporativo
Problema 18.4 — Auditoria de Acesso a Recursos Sensíveis com Trilha de Auditoria
Contexto: Auditoria de Acesso a Recursos Sensíveis com Trilha de Auditoria no contexto de Permissões em Tempo de Execução, Câmera e GPS.
Requisitos de Execução:
- Registrar em log auditado cada acesso à câmera e localização com timestamp e ID do operador.
Resultado Esperado
Trilha de conformidade LGPD/GDPR para recursos nativos sensíveis.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_18_4_SeuNome - Envie na tarefa:
Atividade Cap 18 - Permissões em Tempo de Execução, Câmera e GPS
🔑 Gabarito de Código & Solução Comentada
package com.empresa.mobile.security
import java.time.Instant
data class RegistroAcessoRecurso(val recurso: String, val timestamp: Instant, val concedido: Boolean)
object AuditoriaRecursosNativos {
private val registros = mutableListOf<RegistroAcessoRecurso>()
fun registrar(recurso: String, ok: Boolean) {
registros.add(RegistroAcessoRecurso(recurso, Instant.now(), ok))
println("Auditoria de Seguranca: Acesso a '$recurso' -> Concedido: $ok")
}
}
fun main() {
AuditoriaRecursosNativos.registrar("GPS", true)
}
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |