文件选择器插件可以正常工作,但在某些情况下不能:
*我必须手动请求权限
*如果我代替拍照,则会显示权限提示。授予权限后,我可以返回并选择一个文件,它将正常运行。
*如果从名为“文件”的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
当尝试 resolveNativePath()时,出现以下错误消息:
错误:“试图在空对象引用上调用接口方法'int android.database.Cursor.getColumnIndexOrThrow(java.lang.String)'”
更新:
在具有Android 6 API 23的模拟器和设备上进行了测试,从“下载”文件夹中选择文件可以正常工作,不会引起任何问题:
路径:content://com.android.providers.media.documents/document/image%3A40
resolveNativePath:file:///storage/emulated/0/Android/data/com.android.browser/files/Download/2019-06-27-10-02-12--1835644526.jpg
已测试图像和PDF文件
结论:
文件选择器从“下载”文件夹中选择文件时出现问题。此问题出现在Android 7、8、9中。在android版本6中,文件选择器正常工作。
项目信息:
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