</>AppInitDev DevelopersCentro de aprendizaje Android
Android • Kotlin · TUTORIAL PRÁCTICO

Seleccionar imágenes con Photo Picker en Kotlin y Compose

Permite elegir fotos sin solicitar acceso general a toda la galería.

◎
Objetivo del tutorial

Usar el selector de fotos del sistema y trabajar con el Uri devuelto de manera segura.

CONTEXTO

Por qué es importante

Photo Picker es la opción recomendada para que el usuario seleccione archivos multimedia concretos. En escenarios compatibles evita solicitar permisos amplios para leer toda la biblioteca. Tras la selección recibes un Uri: es importante abrir el contenido mediante ContentResolver en lugar de asumir una ruta local de archivo.

ANTES DE EMPEZAR

Requisitos

  • Proyecto Compose y dependencias AndroidX Activity actualizadas.
  • Un flujo de prueba para elegir y previsualizar una imagen.

Trabaja en un proyecto de pruebas. Revisa las versiones y condiciones específicas de la documentación oficial, ya que las APIs y las políticas evolucionan.

PASO A PASO

Implementación

01

Determina si tu función requiere una imagen o…

Determina si tu función requiere una imagen o varias y elige el contrato Photo Picker correspondiente.

02

Registra el launcher en un composable mediante rememberLauncherForActivityResult…

Registra el launcher en un composable mediante rememberLauncherForActivityResult con PickVisualMedia.

03

Muestra un botón para abrir el selector y…

Muestra un botón para abrir el selector y define el tipo ImageOnly para limitar el formato.

04

Comprueba si el Uri devuelto es null cuando…

Comprueba si el Uri devuelto es null cuando el usuario cancela. No interpretes un resultado vacío como error.

05

Abre y procesa el Uri mediante ContentResolver o…

Abre y procesa el Uri mediante ContentResolver o una librería compatible. Gestiona límites de tamaño y acceso persistente si corresponde.

06

Prueba selección, cancelación, rotación y dispositivos con diferentes…

Prueba selección, cancelación, rotación y dispositivos con diferentes versiones de Android; revisa el comportamiento de compatibilidad oficial.

EJEMPLO EXPLICADO

Fragmento de referencia

KOTLIN
@Composable
fun ElegirImagen(onSeleccion: (Uri) -> Unit) {
    val selector = rememberLauncherForActivityResult(
        ActivityResultContracts.PickVisualMedia()
    ) { uri -> if (uri != null) onSeleccion(uri) }
    Button(onClick = {
        selector.launch(PickVisualMediaRequest(
            ActivityResultContracts.PickVisualMedia.ImageOnly
        ))
    }) { Text("Seleccionar foto") }
}
// Agrega importaciones Activity Compose, Uri y Material.

Ejemplo educativo: cuando se indique, añade las importaciones, dependencias, claves de prueba o clases de tu proyecto. No se presenta como proyecto Android completo y compilado.

EJERCICIO

Ponlo a prueba

Selecciona una imagen, cancela en el segundo intento y gira el dispositivo. Comprueba que la app no cierre inesperadamente ni solicite permisos amplios.

RESULTADOS

Lista de comprobación

  • La implementación cumple el objetivo: usar el selector de fotos del sistema y trabajar con el uri devuelto de manera segura.
  • El comportamiento se verificó con datos de prueba y se documentaron los casos de fallo.
  • Los recursos, dependencias y políticas se comprobaron contra las referencias oficiales.
  • No se registran datos sensibles ni se da por probada una mejora sin evidencia.
DEPURACIÓN

Errores habituales

  • No convertir Uri a rutas absolutas de archivo con split.
  • No guardar copias de imágenes sin necesidad o consentimiento.
  • No asumir que todos los dispositivos presentan idéntico selector.
PREGUNTAS FRECUENTES

¿Necesito READ_MEDIA_IMAGES para seleccionar una foto?

Con Photo Picker, normalmente no necesitas ese permiso amplio para elegir el contenido autorizado por el usuario; comprueba el flujo concreto.

DOCUMENTACIÓN OFICIAL Y TÉCNICA

Referencias para ampliar

Consulta las versiones, limitaciones y requisitos vigentes antes de integrar los ejemplos en producción.

SIGUE APRENDIENDO

Tutoriales relacionados

← Más tutoriales de Desarrollo Android general con KotlinIr a AppInitDev ↗