В Lollipop функция загрузки отлично работает в моем приложении, но когда я обновился до Marshmallow, мое приложение вылетает и выдает эту ошибку при попытке загрузки из Интернета на SD-карту:
Neither user nor current process has android.permission.WRITE_EXTERNAL_STORAGE
Он жалуется на эту строку кода:
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
У меня есть разрешения в манифесте вне приложения:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
Я очистил и перестроил проект, но он все равно вылетает.
Ответы:
Вы должны проверить, предоставил ли пользователь разрешение внешнего хранилища, используя:
Если нет, вам нужно попросить пользователя предоставить вашему приложению разрешение:
Конечно, они предназначены только для устройств с зефиром, поэтому вам нужно проверить, работает ли ваше приложение на «Зефире»:
Будьте также уверены, что ваша деятельность реализует
OnRequestPermissionResult
Полное разрешение выглядит так:
Разрешение результата обратного вызова:
источник
Manifest.permission.WRITE_EXTERNAL_STORAGE
всегда возвращает «-1», т.е. разрешение отклонено. Проверьте новую документацию, там написано, что для API 19 и выше вам не нужноWRITE_EXTERNAL_STORAGE
разрешение. Как упоминалось в некоторых из приведенных выше комментариев, вы должны делать все это сManifest.permission.READ_EXTERNAL_STORAGE
getExternalFilesDir()
. В других случаях, все еще разрешениеandroid.permission.WRITE_EXTERNAL_STORAGE
должно быть объявлено в самом конце.Вежливость идет к Запросу разрешений во время выполнения .
пример
Объявите это как Глобальный
Добавьте это в ваш
onCreate()
разделПосле setContentView (R.layout.your_xml);
Теперь добавляем checkPermission () и requestPermission ()
FYI
onRequestPermissionsResult
источник
Проверка нескольких разрешений на уровне API 23 Шаг 1:
Шаг 2:
Шаг 3:
Шаг 4: в onCreate of Activity checkPermissions ();
источник
never ask again
отсутствующими несколькими разрешениями? Получает ли пользователь какие-либо отзывы? Было бы неплохо увидеть реальный пример этого или нескольких комментариев к вашим фрагментам кода.Если нет определенных требований записи на внешнее хранилище, вы всегда можете сохранить файлы в каталоге приложения. В моем случае мне нужно было сохранять файлы, и, потратив на это 2-3 дня, я узнал, изменил ли я путь к хранилищу с
в
это работает как шарм на всех устройствах. Это связано с тем, что для записи во внешнее хранилище необходимы дополнительные разрешения, но запись во внутреннем каталоге приложения проста.
источник
вам нужно использовать разрешение времени выполнения в зефире https://developer.android.com/training/permissions/requesting.html
Вы можете проверить информацию о приложении -> разрешение
ваше приложение получает разрешение на запись во внешнее хранилище или нет
источник
Похоже, пользователь отклонил разрешение, и приложение пытается выполнить запись на внешний диск, что приводит к ошибке.
Проверьте https://developer.android.com/training/permissions/requesting.html
Это видео даст вам лучшее представление о UX и о разрешениях среды выполнения https://www.youtube.com/watch?v=iZqDdvhTZj0.
источник
Начиная с версии «Зефир», разработчики должны запрашивать у пользователя разрешения во время выполнения. Позвольте мне дать вам весь процесс запроса разрешений во время выполнения.
Я использую ссылку здесь: зефир разрешения времени выполнения Android .
Сначала создайте метод, который проверяет, даны ли все разрешения или нет
Теперь вот код, который запускается после вышеуказанного метода. Мы переопределим
onRequestPermissionsResult()
метод:Если пользователь нажимает на опцию « Запретить», то
showDialogOK()
для показа диалога будет использоваться методЕсли пользователь нажимает кнопку «Запретить», а также флажок «никогда больше не спрашивать» , то
explain()
для отображения диалога будет использоваться метод.методы отображения диалогов:
Приведенный выше фрагмент кода запрашивает четыре разрешения одновременно. Вы также можете запросить любое количество разрешений в любой вашей деятельности в соответствии с вашими требованиями.
источник
После долгих поисков этот код работает для меня:
Проверьте, есть ли у разрешения: Проверьте разрешение WRITE_EXTERNAL_STORAGE Разрешено или нет?
Реализуйте метод Override onRequestPermissionsResult для проверки, является ли пользователь разрешенным или запрещенным.
источник
это работает для меня
источник
источник
Перед началом загрузки проверьте разрешения на время выполнения и, если у вас нет разрешения, запросите разрешения, как этот метод
requestStoragePermission ()
источник
Проще говоря, разрешение может быть предоставлено с использованием файла manifest.xml, но это было нормально до версии 6 API SDK уровня 23, после чего, если мы хотим получить разрешение, мы должны запросить использование, чтобы разрешить разрешение которые нужны.
Просто добавьте этот код в mainActivity.java
Замените CAMERA или добавьте WRITE_EXTERNAL_STORAGE, если хотите, и уникальным кодом.
Это простой код для получения разрешения.
источник