Протестируйте программно, если в 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.

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

Другие вопросы по тегам