Lidando com recusas e justificativas
Explique por que uma permissão é necessária.
Lidando com recusas e justificativas é uma aula grátis de Android Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Android Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Android Academy inclui 4 aulas no total.
Como lidar com recusas
Os usuários podem recusar uma permissão, inclusive recusá-la permanentemente. Um aplicativo bem elaborado lida com todos os estados de forma adequada: concedida, recusada uma vez e recusada com a opção "não perguntar novamente".
Três estados possíveis
Após uma solicitação, você pode estar em um de três estados:
- Concedida: prossiga com o recurso
- Recusada (é possível perguntar novamente): explique e solicite de novo
- Recusada permanentemente: a caixa de diálogo não aparece mais; oriente o usuário até as Configurações
O que é uma justificativa
Uma justificativa é uma breve explicação do motivo pelo qual seu aplicativo precisa de uma permissão. O Android informa quando exibir uma por meio de shouldShowRequestPermissionRationale.
shouldShowRequestPermissionRationale
Esse método retorna true quando o usuário recusou a permissão pelo menos uma vez, mas não selecionou "não perguntar novamente". Esse é o momento de explicar antes de solicitar novamente.
val activity = LocalContext.current as Activity
val showRationale = ActivityCompat
.shouldShowRequestPermissionRationale(
activity,
Manifest.permission.CAMERA
)Interpretando o sinal
Interprete o valor juntamente com a verificação da concessão:
- Concedida: não há nada a fazer
- Não concedida e
shouldShowRationale == true: exiba uma explicação e solicite novamente - Não concedida e
shouldShowRationale == false: pode ser a primeira solicitação ou uma recusa permanente
Exibindo uma caixa de diálogo de justificativa
Quando uma justificativa for necessária, apresente uma caixa de diálogo amigável antes de iniciar novamente a solicitação do sistema, para que o usuário entenda o benefício.
if (showRationale) {
AlertDialog(
onDismissRequest = { },
title = { Text("Camera needed") },
text = { Text("We use the camera to scan codes.") },
confirmButton = {
TextButton(onClick = {
launcher.launch(Manifest.permission.CAMERA)
}) { Text("Continue") }
}
)
}Detectando uma recusa permanente
Se a permissão ainda não tiver sido concedida e shouldShowRationale for false depois de o usuário já ter sido consultado, trate-a como recusada permanentemente. A caixa de diálogo do sistema não aparecerá mais.
Acompanhando se você já solicitou
Como shouldShowRationale também é false na primeira solicitação, acompanhe uma sinalização (por exemplo, em DataStore) que registre que você já solicitou a permissão pelo menos uma vez. Assim, será possível distinguir a primeira solicitação de uma recusa permanente.
Encaminhando os usuários para as Configurações
Em caso de recusa permanente, não é possível solicitar novamente. Ofereça um botão que abra a página de configurações do seu aplicativo para que o usuário possa conceder a permissão manualmente.
fun openAppSettings(context: Context) {
val intent = Intent(
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.fromParts("package", context.packageName, null)
)
context.startActivity(intent)
}Projetando a interface para recusas
Nunca deixe uma tela vazia ou com falhas quando uma permissão for recusada. Exiba uma mensagem clara, explique o impacto e ofereça a ação adequada: solicitar novamente, abrir as Configurações ou continuar com funcionalidade reduzida.
Respeite a escolha do usuário
Não insista. Se o usuário recusou a permissão, não o bombardeie em todas as telas. Solicite novamente apenas quando ele realizar uma ação que precise do recurso e, caso contrário, reduza a funcionalidade de forma adequada.
Verificação rápida
Teste sua compreensão sobre recusas e justificativas.
Recapitulação
Você aprendeu a lidar com recusas:
- Três estados: concedida, recusada e recusada permanentemente
shouldShowRequestPermissionRationaleindica quando explicar- Acompanhe se você já solicitou a permissão para detectar uma recusa permanente
- Em caso de recusa permanente, encaminhe o usuário para as Configurações do aplicativo
- Projete uma interface clara para o estado de recusa e evite insistir
A seguir: boas práticas de privacidade.
Perguntas Frequentes
A aula “Lidando com recusas e justificativas” é grátis?
Sim — o texto completo de “Lidando com recusas e justificativas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Android Academy, atualize para CoddyKit PRO. O curso de Android Academy inclui 4 aulas no total.
O que vou aprender em “Lidando com recusas e justificativas”?
Explique por que uma permissão é necessária. Você pratica Android Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Android Academy?
Nenhuma experiência prévia é necessária. Android Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Lidando com recusas e justificativas”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Android Academy?
Sim. Cada aula de Android Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- O modelo de permissões do Android
- Solicitando permissões no Compose
- Lidando com recusas e justificativas
- Práticas recomendadas de privacidade