Normal Permission en Android — qué es, niveles de protección y principio de funcionamiento

Autor: IT Sectr Publicado: 2026-05-20 Tiempo de lectura: 8 min

Normal Permission es una categoría de permisos en Android que el sistema concede automáticamente sin preguntar al usuario. Según Android Developer Documentation, 2024, los permisos normales tienen ProtectionLevel normal y no requieren un diálogo en tiempo de ejecución, a diferencia de los peligrosos. Cubren el acceso a internet, el estado de la red y la vibración, sin crear riesgos para los datos confidenciales del usuario.

Puntos clave

  • Normal Permission es una categoría de permisos de Android con ProtectionLevel normal, concedidos automáticamente al instalarse.
  • Para usarlo, basta con añadir uses-permission en el manifiesto — no se muestra ningún diálogo al usuario.
  • La principal diferencia con los peligrosos es la ausencia de una solicitud en tiempo de ejecución y la imposibilidad de revocarlo a través de la configuración.
  • La lista incluye INTERNET, ACCESS_NETWORK_STATE, VIBRATE, ACCESS_WIFI_STATE y otras constantes del sistema.
  • Se puede comprobar el nivel de protección mediante PackageManager.getPermissionInfo en el código de la aplicación.

Qué es Normal Permission en Android

Normal Permission es un tipo de permiso del sistema en Android con ProtectionLevel normal, que se concede a una aplicación automáticamente en el momento de la instalación. El desarrollador no necesita escribir código para solicitarlo — basta con declarar el permiso en AndroidManifest.xml. El usuario no ve ningún diálogo y no puede revocar un permiso normal por separado, solo desinstalando toda la aplicación.

El sistema Android clasifica los permisos normales como de bajo riesgo — no otorgan acceso a datos personales, cámara o micrófono. Ejemplos típicos: acceso a internet, control de vibración, lectura del estado del Wi-Fi. Según Android Security Model (2024), alrededor del 40 por ciento de todos los permisos del sistema pertenecen a la categoría normal.

Una propiedad importante — los permisos normales no se pueden revocar en tiempo de ejecución a través de Ajustes. Si el usuario quiere denegar el acceso, la única forma es desinstalar la aplicación. Los desarrolladores deben considerar esto en la arquitectura, pero para los usuarios este enfoque simplifica la interacción: sin diálogos al primer inicio.

Historia de la categoría

La división en permisos normales y peligrosos apareció en Android 6.0 Marshmallow (API 23). Antes de esta versión, todos los permisos se solicitaban al instalar — el usuario veía una lista única y la aceptaba o rechazaba en su totalidad. Normal Permission mantuvo este modelo para operaciones de bajo riesgo, mientras que Dangerous pasó a la solicitud en tiempo de ejecución. Este cambio mejoró la experiencia del usuario y al mismo tiempo aumentó la seguridad.

Qué API requieren Normal Permission

Muchas API del sistema Android requieren una declaración explícita de un permiso normal, incluso si el acceso es automático. Por ejemplo, la clase ConnectivityManager requiere ACCESS_NETWORK_STATE, VibratorService requiere VIBRATE, WifiManager requiere ACCESS_WIFI_STATE. Sin declarar el correspondiente uses-permission, la llamada a estas API provocará una SecurityException.

Cómo funciona ProtectionLevel normal

ProtectionLevel normal es el nivel mínimo de protección en el sistema de permisos de Android. Los permisos con este nivel se declaran en el manifiesto, y el sistema verifica la declaración al instalar, concediendo el acceso sin intervención del usuario. No se muestran elementos de la interfaz de usuario, no se invoca ninguna devolución de llamada.

El mecanismo de verificación funciona a nivel de PackageManager. Durante la instalación del APK, el sistema escanea todas las etiquetas uses-permission, determina el nivel de protección de cada permiso cotejándolo con las definiciones del sistema en los archivos permissions.xml, y para el nivel normal simplemente registra el acceso. El proceso dura milisegundos y no requiere interacción con la interfaz de usuario.

El algoritmo de concesión funciona de la siguiente manera:

  • El sistema lee el manifiesto en el momento de la instalación de la aplicación
  • Coteja el protectionLevel en /etc/permissions/ del dispositivo
  • Si el valor es normal — concede automáticamente el acceso
  • El permiso permanece activo hasta que la aplicación se desinstala por completo

El usuario no puede revocar un permiso normal a través de la interfaz. En la configuración de las aplicaciones, en la sección de Permisos, solo se muestran los permisos peligrosos. Esto contrasta con iOS, donde cada permiso requiere una confirmación independiente, independientemente del nivel de sensibilidad de la función.

Normal Permission vs Dangerous Permission

Normal y Dangerous Permission son dos categorías opuestas de protección en Android. La principal diferencia está en la forma de concesión: los normales se otorgan automáticamente al instalar, los peligrosos requieren un consentimiento explícito mediante un diálogo en tiempo de ejecución. Esta distinción está integrada en la arquitectura de seguridad de Android desde la versión 6.0 Marshmallow.

Comparación de las características clave:

CaracterísticaNormal PermissionDangerous Permission
ProtectionLevelnormaldangerous
Solicitud al usuarioNo se requiereDiálogo en tiempo de ejecución obligatorio
Posibilidad de revocaciónNo, solo desinstalando la aplicaciónSí, a través de ajustes en cualquier momento
Verificación en códigoSiempre PERMISSION_GRANTEDcheckSelfPermission obligatorio
EjemplosINTERNET, VIBRATE, ACCESS_NETWORK_STATECAMERA, RECORD_AUDIO, ACCESS_FINE_LOCATION

Diferencia en la solicitud al usuario

El usuario no ve ningún diálogo al solicitar Normal Permission. Si una aplicación necesita INTERNET — lo obtiene silenciosamente. Para Dangerous Permission, el sistema muestra un diálogo modal con la descripción del acceso solicitado. El usuario pulsa Permitir o Denegar, y luego puede revocar el permiso en cualquier momento a través de Ajustes. Esta es una diferencia clave de UX que determina la estrategia de desarrollo de la interfaz.

Cuándo elegir Normal

Normal debe utilizarse en todos los casos en que el acceso no implique datos confidenciales. ACCESS_NETWORK_STATE para comprobar la conectividad, VIBRATE para la retroalimentación háptica, INTERNET para peticiones HTTP — todos estos son permisos normales. Usar el nivel dangerous donde el normal es suficiente es una mala práctica, que crea diálogos innecesarios y reduce la confianza del usuario en la aplicación.

Lista de permisos normales en Android

Android define varias decenas de permisos normales, cada uno correspondiente a una función del sistema específica. Todos están disponibles a través de las constantes de la clase Manifest.permission. A continuación se muestra una lista de los más utilizados en el desarrollo de aplicaciones.

ConstanteAccesoDescripción
INTERNETRedApertura de sockets de red para peticiones HTTP
ACCESS_NETWORK_STATERedObtención de información sobre el estado de la red
ACCESS_WIFI_STATEWi-FiLectura de información sobre conexiones Wi-Fi
VIBRATEVibraciónControl del vibrador del dispositivo
BLUETOOTHBluetoothConexión a dispositivos Bluetooth
WAKE_LOCKAlimentaciónBloqueo de la suspensión del procesador
SET_ALARMAlarmaConfiguración de alarma mediante AlarmManager
CHANGE_NETWORK_STATERedCambio del estado de la conexión de red

Grupos de permisos normales

Los permisos normales no se agrupan en Permission Groups para su visualización en la interfaz de usuario. Los grupos en Android están destinados a la pantalla de configuración, donde solo se muestran los permisos peligrosos. Sin embargo, los permisos normales se pueden dividir lógicamente en categorías: red (INTERNET, ACCESS_NETWORK_STATE), hardware (VIBRATE, WAKE_LOCK), sistema (SET_ALARM) y permisos Bluetooth.

Algunas constantes de Manifest.permission pueden cambiar su nivel de protección en diferentes versiones de Android. Por ejemplo, BLUETOOTH_CONNECT en Android 12+ se convirtió en un permiso peligroso con solicitud en tiempo de ejecución, aunque en versiones anteriores era normal. Se recomienda a los desarrolladores comprobar el protectionLevel actual para la API objetivo a través de la documentación.

Comprobación de Normal Permission mediante PackageManager

Un desarrollador puede comprobar mediante programación si un permiso es normal a través de PackageManager. El método getPermissionInfo devuelve PermissionInfo cuyo campo protectionLevel contiene el indicador PermissionInfo.PROTECTION_NORMAL. Esto es útil para el manejo dinámico y la depuración.

kotlin
fun isNormalPermission(permission: String): Boolean {
    val pm = packageManager
    val info = pm.getPermissionInfo(
        permission,
        PackageManager.GET_META_DATA
    )
    return info.protectionLevel ==
        PermissionInfo.PROTECTION_NORMAL
}

Cómo declarar Normal Permission en el manifiesto

Declarar Normal Permission en AndroidManifest.xml es la operación más sencilla, que requiere una sola etiqueta uses-permission. No se necesita configuración adicional de protectionLevel, ya que el nivel de protección lo determina la definición del sistema, no el manifiesto de la aplicación. El desarrollador simplemente especifica el nombre completo de la constante.

xml
<!-- 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" />

El sistema procesa todas las declaraciones al instalarse. Si al menos uno de los permisos declarados tiene un protectionLevel diferente de normal, se requerirá una solicitud en tiempo de ejecución. INTERNET es el permiso normal más popular, presente en la mayoría de las aplicaciones de Android, especialmente las que realizan peticiones HTTP o cargan contenido de la red.

Ejemplo de manifiesto completo

Un ejemplo completo de AndroidManifest.xml con permisos normales y peligrosos demuestra la diferencia: sintácticamente las etiquetas uses-permission son iguales, pero en tiempo de ejecución INTERNET y VIBRATE se concederán automáticamente, mientras que CAMERA requerirá un diálogo.

xml
<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>

Manifest Merger y Normal Permission

Al usar bibliotecas — Google Play Services, Firebase, Glide — estas pueden añadir sus propios uses-permission al manifiesto final a través de Manifest Merger. Algunos son normales (INTERNET para Firebase), otros peligrosos (ACCESS_FINE_LOCATION para Google Maps). El desarrollador debe comprobar el manifiesto fusionado final en build/outputs/logs/manifest-merger-report.txt antes de la publicación.

Limitaciones de Normal Permission

Normal Permission tiene dos limitaciones fundamentales: la imposibilidad de revocarlo por parte del usuario y la ausencia de una interfaz de gestión. Si el usuario no confía en la aplicación pero el permiso normal ya se ha concedido automáticamente — la única solución es desinstalar la aplicación. Esto crea un cierto riesgo, ya que los permisos normales no se pueden bloquear con los medios estándar de Android.

Una limitación adicional aparece en dispositivos con múltiples perfiles (Work Profile, Multiple Users). Normal Permission se concede a todos los perfiles a la vez — la aplicación no puede restringir el permiso a solo uno. En escenarios empresariales esto se resuelve mediante Managed Configurations.

No es posible comprobar si una aplicación está usando un Normal Permission en un momento dado. El método del sistema checkSelfPermission solo funciona para permisos peligrosos. Para los normales siempre devuelve PERMISSION_GRANTED, lo que no refleja la actividad real. Esto debe tenerse en cuenta durante las auditorías de seguridad y el análisis del comportamiento de la aplicación.

También vale la pena recordar que algunos fabricantes de dispositivos (Xiaomi, Huawei, Samsung) modifican el comportamiento estándar de los permisos. En sus firmwares, Normal Permission puede requerir permisos adicionales en el shell propietario MIUI o EMUI. Se recomienda a los desarrolladores probar en dispositivos reales de diferentes fabricantes.

Preguntas frecuentes

¿En qué se diferencia Normal Permission de Dangerous?

Normal Permission se concede automáticamente al instalar sin diálogo. Dangerous requiere una solicitud en tiempo de ejecución con el consentimiento explícito del usuario y puede revocarse a través de ajustes. Normal usa ProtectionLevel normal, Dangerous usa protectionLevel dangerous.

¿Necesito escribir código para Normal Permission?

No, para los permisos normales basta con declarar uses-permission en AndroidManifest.xml. No se requiere código de solicitud — el sistema concede el acceso automáticamente. Esto los diferencia de los peligrosos, donde se necesita ActivityCompat.requestPermissions.

¿Cuáles son los Normal Permission más populares?

Los más utilizados son: INTERNET (peticiones de red), ACCESS_NETWORK_STATE (comprobación de conectividad), VIBRATE (retroalimentación háptica) y WAKE_LOCK (mantener el procesador activo). Prácticamente todas las aplicaciones de Android usan al menos INTERNET.

¿Se puede revocar Normal Permission?

No, Normal Permission no se puede revocar a través de la configuración de la aplicación. La única forma de detener el acceso es desinstalar la aplicación. Esta es una diferencia clave con los permisos peligrosos, que el usuario puede desactivar en cualquier momento.

¿Cómo comprobar el ProtectionLevel de un permiso?

Use PackageManager.getPermissionInfo pasando el nombre del permiso como cadena. El método devuelve PermissionInfo con un campo protectionLevel. Compárelo con las constantes PermissionInfo.PROTECTION_NORMAL o PROTECTION_DANGEROUS para determinar la categoría.

Resumen

  • Normal Permission es una categoría de permisos de Android con ProtectionLevel normal, concedidos automáticamente al instalar.
  • Para declararlo, solo se necesita la etiqueta uses-permission en AndroidManifest.xml sin código en tiempo de ejecución.
  • Se diferencian de los peligrosos por la ausencia de diálogo, la imposibilidad de revocación y el bajo nivel de riesgo.
  • Los más populares: INTERNET, ACCESS_NETWORK_STATE, VIBRATE, ACCESS_WIFI_STATE y WAKE_LOCK.
  • El ProtectionLevel se verifica mediante PackageManager.getPermissionInfo en el código.
  • Los permisos normales no se muestran en la pantalla de configuración de las aplicaciones.
  • Al usar bibliotecas, compruebe el manifiesto final a través de Manifest Merger.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también