0Pricing
Android Academy · Lección

Solicitar permisos en Compose

Use las API de Accompanist o de resultados de activity

Solicitar permisos en Compose es una lección gratuita de Android Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Android Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Android Academy incluye 4 lecciones en total.

Solicitar permisos en Compose

En Jetpack Compose, los permisos durante la ejecución se solicitan mediante la Activity Result API, encapsulada por rememberLauncherForActivityResult. Esto evita la antigua devolución de llamada onRequestPermissionsResult.

El contrato RequestPermission

La Activity Result API utiliza contratos que definen la entrada y la salida. ActivityResultContracts.RequestPermission() recibe una cadena con el permiso y devuelve un resultado de concesión Boolean.

Crear un launcher

rememberLauncherForActivityResult crea un launcher vinculado a la composición. Se le pasan el contrato y una devolución de llamada que recibe el resultado.

val launcher = rememberLauncherForActivityResult(
    contract = ActivityResultContracts.RequestPermission()
) { isGranted ->
    if (isGranted) {
        // permission granted, use the feature
    } else {
        // permission denied
    }
}

Lanzar la solicitud

Llame a launcher.launch con el permiso que desea solicitar. El sistema muestra su cuadro de diálogo y la devolución de llamada se ejecuta con la elección del usuario.

Button(onClick = {
    launcher.launch(Manifest.permission.CAMERA)
}) {
    Text("Enable Camera")
}

Compruebe antes de solicitar

No lance una solicitud a ciegas. Compruebe primero si el permiso ya se ha concedido y solicítelo únicamente si no se ha concedido.

val context = LocalContext.current
val alreadyGranted = ContextCompat.checkSelfPermission(
    context, Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED

Seguir el estado en Compose

Guarde el estado actual de la concesión en un estado para que la interfaz pueda reaccionar. Actualícelo dentro de la devolución de llamada del launcher.

var hasCamera by remember {
    mutableStateOf(
        ContextCompat.checkSelfPermission(
            context, Manifest.permission.CAMERA
        ) == PackageManager.PERMISSION_GRANTED
    )
}

val launcher = rememberLauncherForActivityResult(
    ActivityResultContracts.RequestPermission()
) { granted -> hasCamera = granted }

Solicitar varios permisos

Para solicitar varios permisos a la vez, utilice el contrato RequestMultiplePermissions. La devolución de llamada recibe un mapa de permisos y su estado de concesión.

val multi = rememberLauncherForActivityResult(
    ActivityResultContracts.RequestMultiplePermissions()
) { results ->
    val fineLocation = results[Manifest.permission.ACCESS_FINE_LOCATION] == true
}

multi.launch(
    arrayOf(
        Manifest.permission.ACCESS_FINE_LOCATION,
        Manifest.permission.ACCESS_COARSE_LOCATION
    )
)

Controlar la interfaz desde el estado

Muestre contenido diferente según el estado de concesión: si el permiso se ha concedido, muestre la función; de lo contrario, muestre un botón para solicitarlo. Así la pantalla se mantiene reactiva y clara.

if (hasCamera) {
    CameraPreview()
} else {
    Button(onClick = { launcher.launch(Manifest.permission.CAMERA) }) {
        Text("Grant camera access")
    }
}

La opción de permisos de Accompanist

La biblioteca Accompanist Permissions ofrece asistentes de mayor nivel, como rememberPermissionState. Muchos equipos prefieren la Activity Result API directamente para evitar una dependencia adicional; ambas opciones son válidas.

No solicite permisos al iniciar

Evite lanzar una solicitud de permisos en el instante en que aparece una pantalla. Espere hasta que el usuario pulse una acción que claramente necesite ese permiso. Las solicitudes vinculadas al contexto obtienen tasas de concesión mucho más altas.

Recuerde los cambios de configuración

rememberLauncherForActivityResult sobrevive a la recomposición y el marco Activity Result entrega correctamente los resultados incluso después de cambios de configuración, como una rotación. No tiene que gestionar esa infraestructura por su cuenta.

Comprobación rápida

Compruebe cuánto entiende de la solicitud de permisos.

Resumen

Ha aprendido a solicitar permisos de la forma moderna:

  • Use rememberLauncherForActivityResult con el contrato RequestPermission
  • Compruebe primero y después llame a launcher.launch(permission)
  • Siga el estado de concesión en un estado para controlar la interfaz
  • Use RequestMultiplePermissions para solicitar varios permisos a la vez

Siguiente: gestionar las denegaciones y mostrar una justificación.

Preguntas frecuentes

¿La lección «Solicitar permisos en Compose» es gratis?

Sí — el texto completo de «Solicitar permisos en Compose» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Android Academy, actualiza a CoddyKit PRO. El curso de Android Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Solicitar permisos en Compose»?

Use las API de Accompanist o de resultados de activity Practicas Android Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Android Academy?

No se requiere experiencia previa. Android Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Solicitar permisos en Compose»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Android Academy?

Sí. Cada lección de Android Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. El modelo de permisos de Android
  2. Solicitar permisos en Compose
  3. Gestionar denegaciones y justificaciones
  4. Prácticas recomendadas de privacidad
← Volver a Android Academy