Протестируйте программно, если в Android 10+ отключен доступ к устаревшему внешнему хранилищу
Есть ли простой вызов API, который сказал бы мне, должно ли приложение, работающее на Android 10 или более поздней версии, использовать доступ к хранилищу с ограниченным объемом памяти, то есть если обычный доступ к файлам, также известный как "устаревшее внешнее хранилище", отключен? Обратите внимание, что даже если приложение в 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 ответ
Вы можете использовать эти два метода из android.os.Environment
:
-
isExternalStorageLegacy(File path)
Возвращает, является ли общий / внешний носитель по заданному пути устаревшим представлением, которое включает файлы, не принадлежащие приложению.
-
isExternalStorageLegacy()
Возвращает, является ли основной общий / внешний носитель хранения устаревшим представлением, которое включает файлы, не принадлежащие приложению.
Это значение может отличаться от значения, запрошенного
requestLegacyExternalStorage
в манифесте приложения, поскольку приложение может унаследовать свое устаревшее состояние в зависимости от того, когда оно было впервые установлено.Не унаследованные приложения могут продолжать обнаруживать и читать медиа, принадлежащие другим приложениям, через
MediaStore
.
Если вы обнаружите, что у вас есть доступ к устаревшему хранилищу, лично я считаю, что лучше просто перенести данные в хранилище с ограниченным объемом и использовать его вместо этого, поскольку устаревшее хранилище может перестать работать без предупреждения.