Разрешение отказа: чтение com.android.providers.downloads.DownloadStorageProvider требует android.permission.MANAGE_DOCUMENTS

Вопрос: Изменение: это не дублирующий вопрос. Нет вопросов, я видел ответы, как решить это, когда вы не контролируете активность, отправляющую намерение (в моем случае приложение-браузер или, возможно, приложение для просмотра файлов отправляет намерение моему приложению). А затем, в частности, это не касается фотографий/галереи. На какое-то время это наводило мое приложение. Я не могу лично заставить

Вопрос:

Изменение: это не дублирующий вопрос. Нет вопросов, я видел ответы, как решить это, когда вы не контролируете активность, отправляющую намерение (в моем случае приложение-браузер или, возможно, приложение для просмотра файлов отправляет намерение моему приложению). А затем, в частности, это не касается фотографий/галереи.

На какое-то время это наводило мое приложение. Я не могу лично заставить его произойти с любым устройством, но я вижу, что от сбоев это случается с другими.

Мое приложение получает намерение, содержащее файл ZIP из внешнего приложения. Я поймаю его либо в onCreate() либо onNewIntent():

Intent intent = getIntent(); if (intent != null && intent.getData() != null) beginZipIntent(intent);

В beginZipIntent():

Uri data = intent.getData(); String filename = data.toString(); // Open input stream to copy ZIP to a temporary directory. Uri uri = Uri.parse(filename); InputStream inputStream = null; try { inputStream = getContentResolver().openInputStream(uri); // This fails } catch (Exception e) { //… }

На приведенной выше строке некоторые устройства не работают:

Permission Denial: reading com.android.providers.downloads.DownloadStorageProvider uri content://com.android.providers.downloads.documents/document/2772 from pid=26094, uid=10094 requires android.permission.MANAGE_DOCUMENTS, or grantUriPermission()

Я не контролирую приложение/действие, отправляющее намерение. Я подумал, схватив файл сразу и сохранив его во временном каталоге, я мог бы исправить это (как видно из других ответов) – но нет.

Я также добавил android.permission.MANAGE_DOCUMENTS но, как и ожидалось (из других ответов), он не работает.

Кто-нибудь когда-нибудь сталкивался с этим? Кажется, это влияет на устройства от Android 4 до 7, а не на одну версию ОС.

Лучший ответ:

Возможно, вам потребуется добавить следующие права на выполнение во время выполнения кода и показать также

<uses-permission android:name=»android.permission.WRITE_INTERNAL_STORAGE» /> <uses-permission android:name=»android.permission.READ_EXTERNAL_STORAGE»/>

вы можете сослаться на эту ссылку #save_zip_files

Я надеюсь, что это помогает!!

Ответ №1

Ну, я столкнулся с этой проблемой раньше, у меня было устройство oppo, которое запускалось на Android версии 7.1, и это сработало хорошо, и это создало проблему на samsung с той же версией Android, поэтому, чтобы решить эту проблему, я попросил разрешение на чтение в случае необходимости, и это сработало.

Пример для людей, которые любят код:

public class CheckPermissions { public static boolean hasPermission(int PERMISSION_REQUEST, String permission, Context context) { if (ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) { // Should we show an explanation? if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, permission) && ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) { return false; } else { ActivityCompat.requestPermissions((Activity) context, new String[]{permission}, PERMISSION_REQUEST); } return false; } else { return true; } } }

И проверить разрешение:

if (CheckPermissions.hasPermission(REQUEST_CODE, Manifest.permission.READ_EXTERNAL_STORAGE, this)) // todo read the saved URI

Также я ожидал от вас добавления разрешения манифеста:

<uses-permission android:name=»android.permission.READ_EXTERNAL_STORAGE» />

И используйте разрешение записи для записи файла.

Ответ №2

Просто добавьте эту строку, прежде чем получить URI

StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder(); StrictMode.setVmPolicy(builder.build());

Оцените статью
Добавить комментарий