Протестируйте программно, если в Android 10+ устаревший доступ к внешнему хранилищу отключен - PullRequest
7 голосов
/ 07 октября 2019

Существует ли простой вызов API, который сообщит мне, должно ли приложение, работающее на Android 10 или более поздней версии, использовать доступ к Scoped Storage, то есть, если обычный доступ к файлу, то есть «Legacy External Storage», отключен? Обратите внимание, что даже если приложение в AndroidManifest.xml, раздел объявлен:

  android:requestLegacyExternalStorage="true"

, доступ к файлу все равно может быть закрыт из-за изменений политики Google в будущем, поэтому тестирование этого значения бесполезно. Единственный способ, который я нашел, - это проверить, доступна ли для чтения корневая папка внешнего хранилища, но для этого приложение должно сначала запросить разрешение хранилища, которое бесполезно для всего остального, если устаревшее хранилище отключено.

public static boolean mustUseScopedStorage() {
    // Impractical must first ask for useless Storage permission...
    File exSD = Environment.getExternalStorageDirectory();
    return !exSD.canRead(); // this test works only if Storage permission was granted.
}

Мне кажется, я когда-то видел новый API для обнаружения этого, но больше не могу найти эту статью ...

1 Ответ

1 голос
/ 18 октября 2019

Вы можете использовать эти два метода из android.os.Environment:

  • isExternalStorageLegacy(File path)

    Возвращает ли общий / внешнийНоситель данных по указанному пути является устаревшим представлением, которое включает файлы, не принадлежащие приложению.

  • isExternalStorageLegacy()

    Возвращает ли основнойобщий / внешний носитель - это устаревшее представление, включающее файлы, не принадлежащие приложению.

Это значение может отличаться от значения, запрошенного requestLegacyExternalStorage вманифест приложения, так как приложение может наследовать свое прежнее состояние в зависимости от того, когда оно было впервые установлено.

Ненаследующие приложения могут продолжать обнаруживать и читать носители, принадлежащие другим приложениям, через MediaStore.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...