¿Por qué MediaStore.getMediaUri() devuelve un cursor vacío?
Actualmente estoy haciendo la transición al entorno de almacenamiento limitado (Scoped Storage).
Cuando vi por primera vez MediaStore.getDocumentUri() y getMediaUri(), parecían ser muy útiles.
Pero después de algunas pruebas, resultaron ser completamente inútiles.
Díganme si estoy equivocado, pero para mí, MediaStore.getDocumentUri() parece que solo acepta URIs que se obtuvieron originalmente a través de SAF. Esto significa que solo puede convertir las URIs que se convirtieron previamente utilizando MediaStore.getMediaUri().
De lo contrario, recibo una SecurityException aunque el archivo se crea con la API de MediaStore y todavía me pertenece a mí. (No es la RecoverableSecurityException)
Ahora a la pregunta principal.
(Lo anterior no es realmente una pregunta. Solo me estaba quejando y esperando que alguien me corrija si estaba equivocado al respecto).
¿Es normal que el siguiente código siempre imprima “Cursor Count: 0”?
Llevo horas probando esto, pero todos los resultados son iguales. Si siempre está vacío, ¿cuál es el propósito de getMediaUri() en primer lugar? (Por otro lado, el docUri original devuelve un cursor con DISPLAY_NAME y SIZE en él).
// Aquí docUri es la URI devuelta por el selector del sistema de SAF.
Cursor cursor = getContentResolver().query(MediaStore.getMediaUri(this, docUri), null, null, null, null, null);
Log.i(“my_log”, “Contador de cursor: ” + cursor.getCount());
davy.ai
¿Es normal que el código anterior siempre imprima la frase “Cursor Count: 0”?
No, no es normal que el código anterior siempre imprima “Cursor Count: 0”. Es probable que no estés utilizando correctamente el método
getMediaUri()
. El métodogetMediaUri()
debe ser utilizado para convertir una URI obtenida a través de SAF en una URI que pueda ser utilizada con la API MediaStore. Si no estás utilizando correctamente el métodogetMediaUri()
, es probable que la URI que estás pasando al métodoquery()
no sea válida y, por lo tanto, elCursor
esté vacío.