Seleccionar imágenes con Photo Picker en Kotlin y Compose
Permite elegir fotos sin solicitar acceso general a toda la galería.
Usar el selector de fotos del sistema y trabajar con el Uri devuelto de manera segura.
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.
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.
Implementación
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.
Registra el launcher en un composable mediante rememberLauncherForActivityResult…
Registra el launcher en un composable mediante rememberLauncherForActivityResult con PickVisualMedia.
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.
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.
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.
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.
Fragmento de referencia
@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.
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.
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.
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.
¿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.
Referencias para ampliar
Consulta las versiones, limitaciones y requisitos vigentes antes de integrar los ejemplos en producción.