Así que tengo una aplicación de Android que abre y muestra archivos PDF, hago que el usuario seleccione archivos PDF como este
fun openFile() { val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply { addCategory(Intent.CATEGORY_OPENABLE) type = "application/pdf" putExtra(Intent.EXTRA_MIME_TYPES, arrayOf("application/pdf")) putExtra(DocumentsContract.EXTRA_INITIAL_URI, MediaStore.Files.getContentUri("external")) } activity?.startActivityForResult(intent, REQUEST_CODE_PDF_FILE) }Y luego recupero el URI del resultado de la actividad, lo muestro y guardo el URI. Sin embargo, la próxima vez que se abra la aplicación, quiero abrir ese mismo archivo, ahora mismo, cuando intento abrir el URI guardado, obtengo lo siguiente:
ava.lang.SecurityException: Permission Denial: opening provider com.android.providers.media.MediaDocumentsProvider from ProcessRecord{c3dfcb2 32587:ca.thing.testapp/u0a237} (pid=32587, uid=10237) requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs at android.os.Parcel.createExceptionOrNull(Parcel.java:2425) at android.os.Parcel.createException(Parcel.java:2409) at android.os.Parcel.readException(Parcel.java:2392) at android.os.Parcel.readException(Parcel.java:2334) at android.app.IActivityManager$Stub$Proxy.getContentProvider(IActivityManager.java:5850) at android.app.ActivityThread.acquireProvider(ActivityThread.java:6973)Claramente, después de cerrar y volver a abrir la aplicación, ya no tengo permiso para usar ese archivo seleccionado. Así que imagino que lo que debo hacer es hacer una copia de ese archivo en algún directorio de caché en el que tenga permisos para poder mostrarlo cuando se vuelva a abrir la aplicación. ¿Cómo haría para hacer eso?
Debe tomar el permiso de uri persistente en onActivityResult para usar el uri más tarde.
No es necesario hacer una copia.