#android-file #cordova-plugin-file
#android-файл #cordova-plugin-file
Вопрос:
Я использую Apache Cordova cordova-plugin-file
для разработки какого-либо приложения для Android. Начиная с Android API 29 (Android 10), приложения больше не имеют прямого доступа к общему пространству из-за проблем с конфиденциальностью.
Я сохранял некоторый PDF-файл file:///storage/emulated/0/Download/
, откуда пользователь мог затем открыть PDF-файл.
window.resolveLocalFileSystemURL('file:///storage/emulated/0/Download/', function (dir) {
dir.getFile(filename, { create: true }, function (file) {
file.createWriter(function (fileWriter) {
console.log('Writing content to file')
fileWriter.onwriteend = function () {
console.log('Successful file write...')
}
fileWriter.onerror = onerror
fileWriter.write(DataBlob)
}, onerror)
}, onerror)
}, onerror)
Но это перестало работать на Android 10.
Как я могу сохранить файл, чтобы он был доступен пользователю?
Ответ №1:
window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory «/ Download» используется для работы
- Это должно работать как есть при настройке API 28 (теперь запрещено Google Play)
- Это должно сработать при настройке API 29 с помощью версии плагина для разработчиков (которая имеет
android:requestLegacyExternalStorage="true"
), в качестве альтернативы вы можете использовать edit-config для добавления этого флага. - Это не сработает при настройке API 30, поскольку API 30 игнорирует
android:requestLegacyExternalStorage
атрибут.
Важно прочитать примечания к Android, прежде чем переходить на API 30. Возможно, вам потребуется перенести ваши файлы в другую папку, чтобы сохранить к ним доступ при настройке API 30 с использованием новых API. Источник.
Решение для Android до 10 (API 29)
Используйте версию плагина для разработчиков
cordova plugin rm cordova-plugin-file
cordova plugin add https://github.com/apache/cordova-plugin-file.git
Я протестировал его, и он позволяет мне использовать cordova.file.externalRootDirectory "/Download"
в Android 10 (API 29)