#android #permissions #android-11
Вопрос:
Я хочу получить дочерний список /storage
каталогов по targetSdk=30
приложению. Итак, я настроил android.permission.MANAGE_EXTERNAL_STORAGE
разрешение AndroidManifest.xml
и создал этот код.
(Я не планирую распространять это приложение, поэтому нет проблем с предоставлением этого разрешения.)
<manifest>
...
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
...
</manifest>
Environment.getStorageDirectory().list() // return null
Однако, как указано в комментарии в коде, этот код всегда будет возвращать значение null…
Не могли бы вы, пожалуйста, помочь мне?
(Я плохо говорю по-английски, поэтому обращаюсь в службу перевода. Извините, если не ясно.)
Комментарии:
1. У вас нет доступа для чтения к этому каталогу ни на одной версии Android.
2. Отсутствует разрешение READ_EXTERNAL_STORAGE.
3. Для всех версий Android вы прочитали доступ к /хранилищу, но не для устройства Android 11.
4. Я забыл написать, что я также дал
WRITE_EXTERNAL_STORAGE
разрешение. Насколько я помнюWRITE_EXTERNAL_STORAGE
, разрешение включеноREAD_EXTERNAL_STORAGE
. Так что, я думаю, с just нет никаких проблемWRITE_EXTERNAL_STORAGE
.5. Спасибо за множество комментариев! Судя по комментариям каждого из них, я думаю, что получить дочерний список «/хранения»выглядит сложно… Тогда есть ли где-нибудь документация, к которой вы не можете получить доступ
/storage
на Android 11?
Ответ №1:
Удалите инструменты:игнорируйте=»ScopedStorage» эту строку из вашего кода и проверьте разрешение на хранение области.
Вам необходимо получить полный доступ к хранилищу, поэтому вам необходимо использовать хранилище с областью действия для устройств Android 11 или выше.
Комментарии:
1. Спасибо, ответьте! Мое приложение
Allow access to manage all files
включено. И я уже подтвердил, чтоMANAGE_EXTERNAL_STORAGE
это работает. Потому что мое приложение может получить доступ ко всему, кроме/storage
. Мне жаль, если мой ответ не соответствует истине…