Плагин File Chooser работает нормально, но в некоторых ситуациях это не так:
- Я могу выбрать файл, но он не обрабатывается. Это из-за разрешения не было предоставлено. Выбор файла не вызывает разрешение!?
* Мне пришлось запросить разрешение вручную
* если я сделаю снимок, появится запрос на разрешение. Получив разрешение, я могу вернуться и выбрать файл, и он будет работать нормально.
- Когда было предоставлено разрешение, выбор файла из любой папки будет работать, за исключением того, что если я попытаюсь из папки Загрузки, он не будет работать. Я тестировал на Huawei Y9 и эмуляторе с API 28 android 9 он не работал. Тем не менее, я тестировал на Samsung Note 4, он работал!.
* если файлы были выбраны из приложения для Android под названием «Файлы», проблем не будет.
какое-либо решение для этой проблемы?
upload(file) {
this.androidPermissions.checkPermission(this.androidPermissions.PERMISSION.WRITE_EXTERNAL_STORAGE).then(res => {
this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.WRITE_EXTERNAL_STORAGE).then( per => {
this.fileChooser.open().then((path) => {
this.filePath.resolveNativePath(path).then(nativeFilePath => {
console.log(nativeFilePath);
this.setFileName(file, nativeFilePath);
this.setFilePath(file, nativeFilePath)
setTimeout(()=>{
this.checkFile(file)
}, 1000)
}).catch(err => console.log('ERROR: '+JSON.stringify(err)));
}).catch(e => console.log('uri'+JSON.stringify(e)));
}).catch(err => {
console.log(err);
});
}),(err => {
this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.WRITE_EXTERNAL_STORAGE);
});
}
setFileName(file, Pathfile) {
this.file.resolveLocalFilesystemUrl(Pathfile).then((res)=>{
file.fileName = res.name;
}).catch((err)=>{
console.log("error name: "+ JSON.stringify(err));
})
}
setFilePath(file, Pathfile) {
this.file.resolveLocalFilesystemUrl(Pathfile).then((fileData)=>{
if (Pathfile) {
file.fileName = fileData.name;
file.fileType = fileData.name.split(".").pop().toString(),
file.filePath = fileData.nativeURL;
}else {
console.log("error: file path")
}
}).catch((err)=>{
console.log("error file path: "+JSON.stringify(err));
})
}
Из журнала консоли:
это путь, который я получаю content: //com.android.providers.downloads.documents/document/16
при попытке resolNativePath () появляется следующее сообщение об ошибке:
ОШИБКА: «Попытка вызвать метод интерфейса« int android.database.Cursor.getColumnIndexOrThrow (java.lang.String) 'для ссылки на пустой объект »
Обновление:
Протестировано на эмуляторе и устройстве с Android 6 API 23, выбор файлов из папки «Загрузки» работал без проблем:
путь: content://com.android.providers.media.documents/document/image%3A40
resolNativePath: file:///storage/emulated/0/Android/data/com.android.browser/files/Download/2019-06-27-10-02-12--1835644526.jpg
Было протестировано изображение и файл PDF
Вывод:
File Chooser имеет проблему с выбором файлов из папки «Загрузки». Эта проблема возникает в Android 7, 8, 9. На версии 6 для Android выбор файлов работал нормально.
информация о проекте:
Ionic:
Ionic CLI : 5.1.0 (C:\Users\asalhajri\AppData\Roaming\npm\node_modules\ionic)
Ionic Framework : ionic-angular 3.9.2
@ionic/app-scripts : 3.1.11
Cordova:
Cordova CLI : 8.1.2 (cordova-lib@8.1.1)
Cordova Platforms : android 7.1.4
Cordova Plugins : cordova-plugin-ionic-keyboard 2.1.2, (and 15 other plugins)
Utility:
cordova-res : 0.3.0
native-run : 0.2.5
System:
NodeJS : v8.11.3 (C:\Program Files\nodejs\node.exe)
npm : 6.9.0
OS : Windows 10