Дочерний список getStorageDirectory всегда возвращает значение null на Android 11

#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 . Мне жаль, если мой ответ не соответствует истине…