Los usuarios que interactúan con tu app en dispositivos Android 14 ahora pueden otorgar acceso parcial a su biblioteca de medios visuales (fotos o videos) cuando una app solicita algún permiso para este tipo de contenido (READ_MEDIA_IMAGES
o READ_MEDIA_VIDEO
) que se introdujo en Android 13 (nivel de API 33).
El nuevo diálogo incluye las siguientes opciones:
- Seleccionar fotos y videos: Novedad en Android 14. El usuario selecciona las fotos y los videos específicos que desea que estén disponibles para tu app.
- Permitir todo: El usuario otorga acceso de biblioteca completa para todas las fotos y todos los videos del dispositivo.
- No permitir: El usuario rechaza todo el acceso.
Si el usuario elige Seleccionar fotos y videos y, luego, tu app vuelve a solicitar READ_MEDIA_IMAGES
o READ_MEDIA_VIDEO
, el sistema muestra un diálogo diferente, lo que le da al usuario la oportunidad de otorgar acceso a fotos y videos adicionales.
Para permitir que las apps admitan los cambios nuevos, el sistema introduce un nuevo permiso: READ_MEDIA_VISUAL_USER_SELECTED
.
Efectos de declarar el nuevo permiso
Si declaras el permiso READ_MEDIA_VISUAL_USER_SELECTED
, y el usuario elige Seleccionar fotos y videos en el diálogo de permisos del sistema, ocurrirá lo siguiente:
- Se rechazarán los permisos
READ_MEDIA_IMAGES
yREAD_MEDIA_VIDEO
. - Se proporcionará acceso temporal y parcial a las fotos y los videos del usuario para otorgar el permiso
READ_MEDIA_VISUAL_USER_SELECTED
. - Si tu app necesita acceder a otras fotos y videos, debes volver a solicitar, de forma manual, el permiso
READ_MEDIA_IMAGES
oREAD_MEDIA_VIDEO
(o ambos).
Ten en cuenta que READ_MEDIA_IMAGES
y READ_MEDIA_VIDEO
son los únicos otros permisos que se necesitan para acceder a la biblioteca de fotos y videos del usuario.
Si declaras READ_MEDIA_VISUAL_USER_SELECTED
, el controlador de permisos sabrá que la app admite que se vuelva a realizar una solicitud manual para seleccionar más fotos y videos.
Para evitar que los usuarios vean varios cuadros de diálogo del tiempo de ejecución del sistema, solicita los permisos READ_MEDIA_VISUAL_USER_SELECTED
, ACCESS_MEDIA_LOCATION
y "lectura de contenido multimedia" (READ_MEDIA_IMAGES
, READ_MEDIA_VIDEO
o ambos) en una sola operación.
Efectos de no declarar el nuevo permiso
Si no declaras el permiso READ_MEDIA_VISUAL_USER_SELECTED
, se produce el siguiente comportamiento:
- Los permisos
READ_MEDIA_IMAGES
yREAD_MEDIA_VIDEO
se otorgan durante la sesión de la app, lo que brinda una concesión de permiso temporal y acceso temporal a las fotos y los videos que selecciona el usuario. Cuando tu app pasa a segundo plano, o cuando el usuario la finaliza de manera activa, el sistema con el tiempo rechaza estos permisos. Este comportamiento es similar a cualquier otro permiso único. - Si tu app necesita acceder a fotos y videos adicionales más adelante, debes volver a solicitar el permiso
READ_MEDIA_IMAGES
oREAD_MEDIA_VIDEO
de forma manual. El sistema sigue el mismo flujo que en la solicitud de permiso inicial y les solicita a los usuarios que seleccionen fotos y videos.
El acceso a las fotos y los videos se conserva cuando se actualiza el dispositivo
En los casos en que tu app esté en un dispositivo que se actualice de una versión anterior de Android a Android 14, el sistema conservará el acceso completo a las fotos y los videos del usuario, y le otorgará algunos permisos automáticamente. El comportamiento exacto depende de los permisos que se le otorguen a tu app antes de que el dispositivo se actualice a Android 14.
Permisos de Android 13
Ten en cuenta la siguiente situación:
- Tu app se instaló en un dispositivo que ejecuta Android 13.
- El usuario otorgó los permisos
READ_MEDIA_IMAGES
yREAD_MEDIA_VIDEO
a tu app. - Luego, el dispositivo se actualiza a Android 14 mientras la app está instalada.
En este caso, tu app todavía tiene acceso completo a las fotos y los videos del usuario.
El sistema también mantiene automáticamente los permisos READ_MEDIA_IMAGES
y READ_MEDIA_VIDEO
para tu app.
Permisos de Android 12 y versiones anteriores
Ten en cuenta la siguiente situación:
- Tu app se instaló en un dispositivo que ejecuta Android 13.
- El usuario otorgó los permisos
READ_EXTERNAL_STORAGE
oWRITE_EXTERNAL_STORAGE
a tu app. - Luego, el dispositivo se actualiza a Android 14 mientras la app está instalada.
En este caso, tu app todavía tiene acceso completo a las fotos y los videos del usuario.
El sistema también otorga los permisos READ_MEDIA_IMAGES
y READ_MEDIA_VIDEO
a tu app automáticamente.
Prácticas recomendadas
En esta sección, se incluyen varias prácticas recomendadas para usar el permiso READ_MEDIA_VISUAL_USER_SELECTED
.
El procesamiento de contenido multimedia en segundo plano básicamente requiere el nuevo permiso
Si la app realiza procesamientos de contenido multimedia, como comprimir o subir contenido en segundo plano, ten en cuenta que los estados de los permiso READ_MEDIA_IMAGES
y READ_MEDIA_VIDEO
volver a ser rechazados en algún momento. Te recomendamos que agregues compatibilidad con READ_MEDIA_VISUAL_USER_SELECTED
. Como alternativa, tu app debe verificar si tiene acceso a la foto o video específico, abriendo un objeto InputStream
o realizando una consulta con ContentResolver
.
No almacenes el estado del permiso de forma permanente
No almacenes el estado del permiso de forma permanente, lo que incluye SharedPreferences
o DataStore
. Es posible que el estado almacenado no esté sincronizado con el estado real. El estado del permiso puede cambiar después del restablecimiento del permiso, la hibernación de la app, un cambio que inicie el usuario en la configuración de la app, o cuando esta pasa a segundo plano. En su lugar, verifica los permisos de almacenamiento con ContextCompat.checkSelfPermission()
.
No supongas que tienes acceso completo a fotos y videos
En función de los cambios introducidos en Android 14, es posible que tu app solo tenga acceso parcial a la biblioteca de fotos del dispositivo. Si la app almacena en caché datos de MediaStore
cuando se realiza una consulta con ContentResolver
, es posible que la caché no esté actualizada.
- Siempre consulta
MediaStore
conContentResolver
, en lugar de depender de una caché almacenada. - Mantén los resultados en la memoria mientras la app esté en primer plano.
Trata el acceso de URI como temporario
Si el usuario elige Seleccionar fotos y videos en el diálogo de permisos del sistema, tu app rechazará el acceso a las fotos y los videos seleccionados en algún momento. Tu app siempre debe controlar el caso de no tener acceso a ningún Uri
, sin importar su autoridad.