Как я могу запросить разрешение на доступ к внешним файлам в Android Q?

Услышал, что Android Q представил новую функцию безопасности под названием «Scoped Storage», которая ограничивает доступ к файлам во внешнем хранилище. Моя проблема в том, что мне нужно сохранить текстовый документ в указанном пользователем месте из приложения. Требуется ли для этого какое-либо разрешение, а не READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE в устройствах Q?


person deepak raj    schedule 29.04.2019    source источник


Ответы (1)


Моя проблема в том, что мне нужно сохранить текстовый документ в указанном пользователем месте из приложения.

Используйте ACTION_CREATE_DOCUMENT, чтобы позволить пользователю указать местоположение. Вы можете использовать ContentResolver и его openOutputStream() метод, чтобы получить OutputStream для Uri, которое вы получите от ACTION_CREATE_DOCUMENT. Затем вы можете написать свой текст на этом OutputStream.

Требуется ли для этого какое-либо разрешение, а не READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE в устройствах Q?

ACTION_CREATE_DOCUMENT не требует разрешений и работает обратно в Android 4.4.

В качестве альтернативы вы можете записать свой файл в каталог, обозначенный getExternalFilesDir() на Context. Эта часть внешнего хранилища видна пользователю на Android Q и не требует дополнительных разрешений.

Или, если вы оставите свой targetSdkVersion равным 28 или ниже, вы можете использовать WRITE_EXTERNAL_STORAGE и писать где угодно, как вы это делали на Android 9.0+. Однако имейте в виду, что этот подход перестанет работать с Android R, и когда вы поднимете свой targetSdkVersion за 28 (например, чтобы соответствовать требованиям Play Store 2020). Так что использование ACTION_CREATE_DOCUMENT или, возможно, getExternalFilesDir() - лучший долгосрочный ответ.

person CommonsWare    schedule 29.04.2019
comment
Можете ли вы помочь мне с stackoverflow.com/questions/63543414/ - person jazzbpn; 24.08.2020