Normal Permission é uma categoria de permissões no Android que o sistema concede automaticamente sem perguntar ao usuário. De acordo com Android Developer Documentation, 2024, as permissões normais têm ProtectionLevel normal e não exigem um diálogo em tempo de execução, ao contrário das perigosas. Elas cobrem o acesso à internet, ao estado da rede e à vibração, sem criar riscos para os dados confidenciais do usuário.
Pontos principais
Normal Permission é um tipo de permissão do sistema no Android com ProtectionLevel normal, concedida a uma aplicação automaticamente no momento da instalação. O desenvolvedor não precisa escrever código para solicitá-la — basta declarar a permissão no AndroidManifest.xml. O usuário não vê nenhum diálogo e não pode revogar uma permissão normal separadamente, apenas desinstalando toda a aplicação.
O sistema Android classifica as permissões normais como de baixo risco — elas não concedem acesso a dados pessoais, câmera ou microfone. Exemplos típicos: acesso à internet, controle de vibração, leitura do estado do Wi-Fi. De acordo com o Android Security Model (2024), cerca de 40 por cento de todas as permissões do sistema pertencem à categoria normal.
Uma propriedade importante — as permissões normais não podem ser revogadas em tempo de execução através das Configurações. Se o usuário quiser negar o acesso, a única maneira é desinstalar a aplicação. Os desenvolvedores devem considerar isso na arquitetura, mas para os usuários esta abordagem simplifica a interação: sem diálogos na primeira inicialização.
A divisão em permissões normais e perigosas apareceu no Android 6.0 Marshmallow (API 23). Antes desta versão, todas as permissões eram solicitadas na instalação — o usuário via uma lista única e a aceitava ou rejeitava como um todo. A Normal Permission manteve este modelo para operações de baixo risco, enquanto a Dangerous passou para a solicitação em tempo de execução. Esta mudança melhorou a experiência do usuário e ao mesmo tempo aumentou a segurança.
Muitas APIs do sistema Android exigem uma declaração explícita de uma permissão normal, mesmo que o acesso seja automático. Por exemplo, a classe ConnectivityManager requer ACCESS_NETWORK_STATE, o VibratorService requer VIBRATE, o WifiManager requer ACCESS_WIFI_STATE. Sem declarar o uses-permission correspondente, a chamada dessas APIs resultará em uma SecurityException.
ProtectionLevel normal é o nível mínimo de proteção no Sistema de Permissões do Android. As permissões com este nível são declaradas no manifesto, e o sistema verifica a declaração na instalação, concedendo acesso sem intervenção do usuário. Nenhum elemento de interface é mostrado, nenhum callback é invocado.
O mecanismo de verificação funciona ao nível do PackageManager. Durante a instalação do APK, o sistema verifica todas as tags uses-permission, determina o nível de proteção de cada permissão comparando com as definições do sistema nos arquivos permissions.xml, e para o nível normal simplesmente registra o acesso. O processo leva milissegundos e não requer interação com a interface do usuário.
O algoritmo de concessão funciona da seguinte forma:
O usuário não pode revogar uma permissão normal através da interface. Nas configurações das aplicações, na seção de Permissões, apenas as permissões perigosas são exibidas. Isso contrasta com o iOS, onde cada permissão requer uma confirmação separada independentemente do nível de sensibilidade da função.
Normal e Dangerous Permission são duas categorias opostas de proteção no Android. A principal diferença está no método de concessão: as normais são concedidas automaticamente na instalação, as perigosas exigem consentimento explícito através de um diálogo em tempo de execução. Esta distinção está incorporada na arquitetura de segurança do Android desde a versão 6.0 Marshmallow.
Comparação das principais características:
| Característica | Normal Permission | Dangerous Permission |
|---|---|---|
| ProtectionLevel | normal | dangerous |
| Solicitação ao usuário | Não necessária | Diálogo em tempo de execução obrigatório |
| Possibilidade de revogação | Não, apenas desinstalando a aplicação | Sim, através das configurações a qualquer momento |
| Verificação no código | Sempre PERMISSION_GRANTED | checkSelfPermission obrigatório |
| Exemplos | INTERNET, VIBRATE, ACCESS_NETWORK_STATE | CAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION |
O usuário não vê nenhum diálogo ao solicitar Normal Permission. Se uma aplicação precisar de INTERNET — ela o obtém silenciosamente. Para Dangerous Permission, o sistema mostra um diálogo modal descrevendo o acesso solicitado. O usuário pressiona Permitir ou Negar, e posteriormente pode revogar a permissão a qualquer momento através das Configurações. Esta é uma diferença chave de UX que determina a estratégia de desenvolvimento da interface.
Normal deve ser usado em todos os casos em que o acesso não envolva dados confidenciais. ACCESS_NETWORK_STATE para verificar a conectividade, VIBRATE para feedback háptico, INTERNET para requisições HTTP — todas estas são permissões normais. Usar o nível dangerous onde o normal é suficiente é uma má prática, criando diálogos desnecessários e reduzindo a confiança do usuário na aplicação.
O Android define várias dezenas de permissões normais, cada uma correspondendo a uma função específica do sistema. Todas estão disponíveis através das constantes da classe Manifest.permission. Abaixo está uma lista das mais utilizadas no desenvolvimento de aplicações.
| Constante | Acesso | Descrição |
|---|---|---|
| INTERNET | Rede | Abertura de sockets de rede para requisições HTTP |
| ACCESS_NETWORK_STATE | Rede | Obtenção de informações sobre o estado da rede |
| ACCESS_WIFI_STATE | Wi-Fi | Leitura de informações sobre conexões Wi-Fi |
| VIBRATE | Vibração | Controle do vibrador do dispositivo |
| BLUETOOTH | Bluetooth | Conexão a dispositivos Bluetooth |
| WAKE_LOCK | Alimentação | Impedir que o processador entre em modo de suspensão |
| SET_ALARM | Alarme | Definição de alarme através do AlarmManager |
| CHANGE_NETWORK_STATE | Rede | Alteração do estado da conexão de rede |
As permissões normais não são agrupadas em Permission Groups para fins de exibição na interface. Os grupos no Android são destinados à tela de configurações, onde apenas as permissões perigosas são mostradas. No entanto, as permissões normais podem ser logicamente divididas em categorias: rede (INTERNET, ACCESS_NETWORK_STATE), hardware (VIBRATE, WAKE_LOCK), sistema (SET_ALARM) e permissões Bluetooth.
Algumas constantes do Manifest.permission podem alterar seu nível de proteção em diferentes versões do Android. Por exemplo, BLUETOOTH_CONNECT no Android 12+ tornou-se uma permissão perigosa com solicitação em tempo de execução, embora em versões mais antigas fosse normal. Recomenda-se aos desenvolvedores verificar o protectionLevel atual para a API alvo através da documentação.
Um desenvolvedor pode verificar programaticamente se uma permissão é normal através do PackageManager. O método getPermissionInfo retorna PermissionInfo cujo campo protectionLevel contém o flag PermissionInfo.PROTECTION_NORMAL. Isso é útil para manipulação dinâmica e depuração.
fun isNormalPermission(permission: String): Boolean {
val pm = packageManager
val info = pm.getPermissionInfo(
permission,
PackageManager.GET_META_DATA
)
return info.protectionLevel ==
PermissionInfo.PROTECTION_NORMAL
}
Declarar Normal Permission no AndroidManifest.xml é a operação mais simples, exigindo apenas uma tag uses-permission. Nenhuma configuração adicional de protectionLevel é necessária, já que o nível de proteção é determinado pela definição do sistema, não pelo manifesto da aplicação. O desenvolvedor simplesmente especifica o nome completo da constante.
<!-- AndroidManifest.xml -->
<uses-permission
android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission
android:name="android.permission.VIBRATE" />
O sistema processa todas as declarações na instalação. Se pelo menos uma das permissões declaradas tiver um protectionLevel diferente de normal, será necessária uma solicitação em tempo de execução. INTERNET é a permissão normal mais popular, presente na maioria das aplicações Android, especialmente aquelas que fazem requisições HTTP ou carregam conteúdo da rede.
Um exemplo completo de AndroidManifest.xml com permissões normais e perigosas demonstra a diferença: sintaticamente as tags uses-permission são iguais, mas em tempo de execução INTERNET e VIBRATE serão concedidas automaticamente, enquanto CAMERA exigirá um diálogo.
<manifest
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Normal permissions -->
<uses-permission
android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.VIBRATE" />
<!-- Dangerous permission -->
<uses-permission
android:name="android.permission.CAMERA" />
</manifest>
Ao usar bibliotecas — Google Play Services, Firebase, Glide — elas podem adicionar seus próprios uses-permission ao manifesto final através do Manifest Merger. Alguns são normais (INTERNET para Firebase), outros perigosos (ACCESS_FINE_LOCATION para Google Maps). O desenvolvedor deve verificar o manifesto mesclado final em build/outputs/logs/manifest-merger-report.txt antes da publicação.
Normal Permission tem duas limitações fundamentais: a impossibilidade de revogação pelo usuário e a ausência de uma interface de gestão. Se o usuário não confiar na aplicação mas a permissão normal já tiver sido concedida automaticamente — a única solução é desinstalar a aplicação. Isso cria um certo risco, já que as permissões normais não podem ser bloqueadas pelos meios padrão do Android.
Uma limitação adicional aparece em dispositivos com múltiplos perfis (Work Profile, Multiple Users). A Normal Permission é concedida a todos os perfis de uma vez — a aplicação não pode restringir a permissão a apenas um. Em cenários empresariais, isso é resolvido através de Managed Configurations.
Não é possível verificar se uma aplicação está usando uma Normal Permission em um determinado momento. O método do sistema checkSelfPermission funciona apenas para permissões perigosas. Para as normais, ele sempre retorna PERMISSION_GRANTED, o que não reflete a atividade real. Isso deve ser considerado durante auditorias de segurança e análise de comportamento da aplicação.
Vale lembrar também que alguns fabricantes de dispositivos (Xiaomi, Huawei, Samsung) modificam o comportamento padrão das permissões. Em seus firmwares, a Normal Permission pode exigir permissões adicionais na interface proprietária MIUI ou EMUI. Recomenda-se aos desenvolvedores testar em dispositivos reais de diferentes fabricantes.
Perguntas frequentes
Normal Permission é concedida automaticamente na instalação sem diálogo. Dangerous requer uma solicitação em tempo de execução com consentimento explícito do usuário e pode ser revogada através das configurações. Normal usa ProtectionLevel normal, Dangerous usa protectionLevel dangerous.
Não, para permissões normais basta declarar uses-permission no AndroidManifest.xml. Nenhum código de solicitação é necessário — o sistema concede o acesso automaticamente. Isso as diferencia das perigosas, onde é necessário ActivityCompat.requestPermissions.
As mais utilizadas são: INTERNET (requisições de rede), ACCESS_NETWORK_STATE (verificação de conectividade), VIBRATE (feedback háptico) e WAKE_LOCK (manter o processador ativo). Praticamente toda aplicação Android usa pelo menos INTERNET.
Não, Normal Permission não pode ser revogada através das configurações da aplicação. A única maneira de interromper o acesso é desinstalar a aplicação. Esta é uma diferença chave das permissões perigosas, que o usuário pode desativar a qualquer momento.
Use PackageManager.getPermissionInfo, passando o nome da permissão como string. O método retorna PermissionInfo com um campo protectionLevel. Compare-o com as constantes PermissionInfo.PROTECTION_NORMAL ou PROTECTION_DANGEROUS para determinar a categoria.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também