Runtime Permission: qué tipos existen y principio de funcionamiento en Android

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

Runtime Permission es un mecanismo para solicitar permisos durante la ejecución de la aplicación, introducido en Android 6.0 (API 23). A diferencia de la concesión de permisos en la instalación, los runtime permissions permiten al usuario otorgar o revocar el acceso a datos confidenciales (cámara, geolocalización, contactos) en cualquier momento. Según Android Developers (2026), más del 85% de las aplicaciones en Google Play utilizan al menos un runtime permission.

Puntos Clave

  • Runtime Permission es un mecanismo de Android que requiere el consentimiento explícito del usuario para acceder a datos confidenciales.
  • Dangerous permissions son un grupo de permisos que requieren una solicitud en tiempo de ejecución (cámara, micrófono, geolocalización, contactos).
  • Normal permissions son aprobados automáticamente por el sistema y no requieren solicitud en tiempo de ejecución (INTERNET, ACCESS_NETWORK_STATE).
  • One-time permissions son permisos de una sola sesión, introducidos en Android 11, que se revocan automáticamente al cerrar la aplicación.
  • shouldShowRequestPermissionRationale es un indicador que determina si es necesario mostrar una explicación al usuario antes de la solicitud.

¿Qué es Runtime Permission?

Runtime Permission es un modelo de seguridad de Android en el que la aplicación solicita acceso a datos confidenciales en el momento en que esa funcionalidad es realmente necesaria para el usuario. Antes de Android 6.0, todos los permisos se concedían al instalar la aplicación y el usuario no podía revocarlos sin desinstalarla por completo.

Evolución del modelo de permisos de Android

Antes de Android 6.0, el usuario veía una lista de todos los permisos al instalar y podía aceptarlos todos o rechazar la instalación. Un estudio de 2015 mostró que el 87% de los usuarios no lee la lista de permisos al instalar. Android 6.0 introdujo los runtime permissions, dividiendo los permisos en normales (automáticos) y peligrosos (con solicitud). Android 11 añadió los one-time permissions: revocación automática al cerrar la aplicación. Android 13 introdujo Photo Picker y las notificaciones push como runtime permissions independientes.

iOS utiliza un modelo similar desde iOS 10, donde el acceso a la cámara, el micrófono y la geolocalización se solicita en el primer uso. Sin embargo, iOS no tiene el concepto de “permisos normales”: cada permiso se solicita explícitamente y la denegación persiste hasta que el desarrollador vuelve a solicitarlo a través de la configuración del sistema.

¿Cómo funciona Runtime Permission en Android?

Runtime Permission funciona a través de un diálogo del sistema invocado por el método requestPermissions() (AndroidX — ActivityResultLauncher). El sistema muestra un diálogo estándar con una explicación y el usuario elige “Permitir” o “Denegar”. Después de la respuesta, se ejecuta un callback donde la aplicación procesa la decisión del usuario.

Solicitud de permiso mediante ActivityResultLauncher

kotlin
private lateinit var requestPermissionLauncher: ActivityResultLauncher<String>

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    requestPermissionLauncher =
        registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->
            if (isGranted) {
                startCamera()
            } else {
                showPermissionDeniedDialog()
            }
        }
}

private fun checkCameraPermission() {
    when {
        ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
                == PackageManager.PERMISSION_GRANTED -> {
            startCamera()
        }
        ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA) -> {
            showRationaleDialog { requestPermissionLauncher.launch(Manifest.permission.CAMERA) }
        }
        else -> {
            requestPermissionLauncher.launch(Manifest.permission.CAMERA)
        }
    }
}

El método shouldShowRequestPermissionRationale devuelve true si el usuario ya ha denegado la solicitud una vez. En este caso, se recomienda mostrar un diálogo con una explicación de por qué la aplicación necesita el permiso y solo entonces volver a solicitarlo. Esto aumenta la probabilidad de consentimiento del usuario en un 30–40% (datos de Google I/O 2024).

Tipos de permisos en Android

Android clasifica todos los permisos en varios niveles de protección: normales, peligrosos, de firma y especiales. Los permisos normales se conceden automáticamente al instalar. Los permisos peligrosos requieren una solicitud en tiempo de ejecución. Los permisos de firma solo están disponibles para aplicaciones firmadas con el mismo certificado.

Grupos de permisos peligrosos

GrupoPermisosAPI Level
CAMERACAMERAAPI 23+
LOCATIONACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION, ACCESS_BACKGROUND_LOCATIONAPI 23+ (background — API 29+)
STORAGEREAD_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE, READ_MEDIA_IMAGES (API 33+)API 23+ (cambios en API 33)
PHONEREAD_PHONE_STATE, CALL_PHONE, READ_CALL_LOGAPI 23+
MICROPHONERECORD_AUDIOAPI 23+
CONTACTSREAD_CONTACTS, WRITE_CONTACTS, GET_ACCOUNTSAPI 23+
NOTIFICATIONSPOST_NOTIFICATIONSAPI 33+

Los permisos especiales (SYSTEM_ALERT_WINDOW, WRITE_SETTINGS, MANAGE_EXTERNAL_STORAGE) requieren una navegación adicional a la configuración del sistema a través de Settings.ACTION_MANAGE_OVERLAY_PERMISSION. Estos permisos no pueden solicitarse mediante el diálogo estándar del sistema y requieren una acción explícita del usuario en la pantalla de configuración.

Solicitud de permisos en Android 12+

Android 12 introdujo cambios significativos en el modelo de runtime permissions. Los one-time permissions permiten conceder acceso a la cámara, el micrófono o la geolocalización solo para una sesión. Cuando el usuario cierra la aplicación, el permiso se revoca automáticamente. Los indicadores de privacidad son indicadores verdes en la barra de estado que muestran cuándo una aplicación está usando la cámara o el micrófono.

Manejo de permisos de una sola vez

kotlin
// Android 12+ — manejo del permiso único de geolocalización
private fun checkLocationPermission() {
    val permissionLauncher =
        registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->

        val fineLocationGranted = permissions[Manifest.permission.ACCESS_FINE_LOCATION]
        val coarseLocationGranted = permissions[Manifest.permission.ACCESS_COARSE_LOCATION]

        if (fineLocationGranted == true) {
            showUserLocation()
        } else {
            showLocationDisabledDialog()
        }
    }

    permissionLauncher.launch(
        arrayOf(
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.ACCESS_COARSE_LOCATION
        )
    )
}

// Verificar si el permiso fue revocado por el sistema (Android 12+)
class PermissionReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action == Intent.ACTION_PERMISSION_REVOCATION) {
            handleRevokedPermission(intent.getStringExtra(Intent.EXTRA_REVOKED_PERMISSION))
        }
    }
}

Android 13 añadió el permiso POST_NOTIFICATIONS al grupo peligroso, requiriendo una solicitud explícita para enviar notificaciones push. Android 14 introdujo restricciones en la geolocalización en segundo plano: la aplicación debe recibir la aprobación explícita del usuario cada vez que solicita ubicación en segundo plano. Photo Picker (API 33+) reemplazó la necesidad de READ_EXTERNAL_STORAGE para la selección de imágenes.

Manejo de denegaciones del usuario

La denegación del usuario a una solicitud de permiso es una situación normal que debe manejarse correctamente. Existen dos tipos de denegación: única (el usuario pulsó “Denegar”) y permanente (el usuario seleccionó “No volver a preguntar”). En el segundo caso, el diálogo del sistema ya no aparecerá y la aplicación debe redirigir al usuario a la configuración del sistema.

Estrategia de manejo de denegaciones

Después de la primera denegación, la aplicación debe mostrar un diálogo de justificación — su propia explicación de por qué el permiso es necesario. Si el usuario se niega nuevamente, la aplicación debe redirigir a la pantalla de configuración de la aplicación a través de Settings.ACTION_APPLICATION_DETAILS_SETTINGS. Material 3 recomienda usar PermissionRequestBottomSheet para una UX más natural.

Es importante no bloquear completamente la funcionalidad de la aplicación ante una denegación. Por ejemplo, si el usuario denegó la geolocalización, la aplicación debe ofrecer la entrada manual de dirección. Para la cámara, permitir subir una imagen desde la galería. Google recomienda proporcionar siempre un mecanismo de respaldo para todos los runtime permissions.

Recomendaciones de seguridad

Los runtime permissions no son solo un mecanismo técnico, sino también un elemento de confianza del usuario en la aplicación. Solicitar un permiso en un momento inadecuado (por ejemplo, al primer inicio) reduce significativamente la probabilidad de consentimiento. Google Play Store analiza la frecuencia y el contexto de las solicitudes de permisos: las aplicaciones con solicitudes agresivas obtienen posiciones más bajas en la búsqueda.

Reglas para solicitar permisos

Contexto — solicite el permiso inmediatamente antes de realizar la acción que lo requiere. Mínimo — solicite solo los permisos que sean realmente necesarios para el funcionamiento de la función. Transparencia — explique al usuario por qué necesita el permiso antes del diálogo del sistema. Revocación — suscríbase a ACTION_PERMISSION_REVOCATION para manejar correctamente la revocación de permisos en tiempo de ejecución.

Para probar runtime permissions, use comandos de adb: adb shell pm revoke <package> android.permission.CAMERA permite simular la revocación de permisos sin reinstalar la aplicación. Espresso y UiAutomator admiten pruebas de diálogos de permisos a través de GrantPermissionRule. La integración de estas herramientas en el pipeline de CI/CD es obligatoria para aplicaciones con runtime permissions.

Auditoría de permisos en Google Play Console

Google Play Console proporciona una sección de auditoría de permisos, donde los desarrolladores pueden ver con qué frecuencia se solicitan los permisos, qué porcentaje de usuarios los concede y qué permisos fueron revocados. El análisis de estos datos ayuda a identificar solicitudes ineficaces y optimizar la UX. Por ejemplo, si menos del 40% de los usuarios concede la geolocalización, considere revisar el momento de la solicitud y añadir una justificación más convincente.

El uso de Android Vitals para monitorear ANR (Application Not Responding) relacionados con permisos también es crítico. Si una solicitud de permiso se ejecuta en el hilo principal o el diálogo del sistema bloquea la UI, puede causar ANR en dispositivos lentos. Mueva la verificación y solicitud de permisos a un hilo separado o use corutinas de Kotlin para el manejo asíncrono y evitar bloquear la interfaz de usuario.

Preguntas Frecuentes

¿Cómo distinguir una denegación única de una permanente?

shouldShowRequestPermissionRationale devuelve false en caso de denegación permanente (cuando el usuario seleccionó “No volver a preguntar”). El método devuelve true en caso de denegación única, permitiendo mostrar un diálogo de justificación. Si el método devuelve false, la única opción es redirigir al usuario a la configuración del sistema.

¿Se pueden solicitar varios permisos a la vez?

Sí, ActivityResultContracts.RequestMultiplePermissions permite solicitar un conjunto de permisos en una sola llamada. El sistema mostrará diálogos secuencialmente para cada permiso. Se recomienda agrupar permisos lógicamente relacionados (por ejemplo, CAMERA y RECORD_AUDIO para grabación de video), pero no solicitar más de 2–3 a la vez.

¿Cómo funcionan los runtime permissions en Android TV y Wear OS?

Android TV utiliza el mismo modelo de runtime permissions con diálogos mostrados en la pantalla del televisor. Wear OS versión 3+ admite runtime permissions, pero los diálogos se muestran en el reloj. Para Android Auto, todos los permisos se solicitan en el teléfono y el sistema del automóvil recibe los permisos ya aprobados a través de una conexión puente.

¿Qué cambios en los permisos se esperan en Android 16?

Según información preliminar, Android 16 introduce la “caducidad de permisos” para permisos de una sola vez con revocación automática después de 24 horas. También se esperan requisitos más estrictos para la ubicación en segundo plano y una lista ampliada de permisos peligrosos para nuevas categorías (sensores de entorno, escaneo Wi-Fi). Los detalles exactos aparecerán en el tercer trimestre de 2027.

¿En qué se diferencia el runtime permission de Android del de iOS?

iOS no admite “permisos normales” — cada permiso se solicita explícitamente a través de un diálogo del sistema. El usuario puede revocar el permiso en cualquier momento a través de la configuración. La principal diferencia es que iOS no verifica previamente el estado del permiso mediante un equivalente de checkSelfPermission: el sistema muestra automáticamente un diálogo en el primer acceso a una API protegida.

Resumen

  • Runtime Permission es un mecanismo para solicitar datos confidenciales en el momento de su uso real, introducido en Android 6.0.
  • Los permisos peligrosos requieren un diálogo explícito del sistema; los permisos normales se aprueban automáticamente.
  • Los one-time permissions (Android 12+) se revocan al cerrar la aplicación, mejorando la privacidad del usuario.
  • shouldShowRequestPermissionRationale determina si hubo una denegación previa y ayuda a elegir la estrategia de solicitud.
  • Android 13 añadió POST_NOTIFICATIONS como runtime permission; Android 14 endureció los requisitos de geolocalización en segundo plano.
  • Photo Picker (API 33+) reemplaza la necesidad de READ_EXTERNAL_STORAGE para la selección de imágenes.
  • Proporcione siempre un plan de respaldo ante la denegación del usuario: una forma alternativa de ingresar datos o seleccionar manualmente.

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