Мне нужно загрузить вложение, выбранное пользователем через наше приложение. Загрузка работает, когда она вызывается в Activity, которая приняла URI, выбранный пользователем. Но когда я передаю URI в IntentService, чтобы в фоновом режиме можно было загрузить огромное вложение, я получаю исключение «Отказ в разрешении» в IntentService в следующей строке -
final Uri uri = intent.getData();
//This line works within Activity but throws "Permission Denial" exception in IntentService
ParcelFileDescriptor inputPFD = getContentResolver().openFileDescriptor(uri, "r");
FileDescriptor fd = inputPFD.getFileDescriptor();
final FileInputStream fileInputStream = new FileInputStream(fd);
int bytesAvailable = fileInputStream.available();
Stacktrace
-----------
java.lang.SecurityException: Permission Denial: opening provider com.android.externalstorage.ExternalStorageProvider from ProcessRecord{6148698 8180:com.<package name>/u0a140} (pid=8180, uid=10140) requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs
at android.os.Parcel.createException(Parcel.java:2071)
at android.os.Parcel.readException(Parcel.java:2039)
at android.os.Parcel.readException(Parcel.java:1987)
at android.app.IActivityManager$Stub$Proxy.getContentProvider(IActivityManager.java:5054)
at android.app.ActivityThread.acquireProvider(ActivityThread.java:6561)
at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2725)
at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:2117)
at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1671)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1503)
at android.content.ContentResolver.openFileDescriptor(ContentResolver.java:1338)
at android.content.ContentResolver.openFileDescriptor(ContentResolver.java:1286)
Пожалуйста, дайте мне знать что я могу делать не так Если openFileDescriptor не может быть использован для URI, который не был получен исходным действием, пожалуйста, предложите хороший подход для загрузки огромных вложений в фоновом режиме, поскольку пользователь может выйти из действия после выбора файла для загрузки. Ценю вашу помощь.