Greetings,
File Chooser plugin works fine, but in some situations it does not:
1- I can choose a file, but it does not get processed. This is due permission was not granted. Choosing a file does not prompt permission!?
*I had to request
*if I take a picture instead, permission prompted will show up. once permission granted, I can go back and choose a file and it will work fine.
2- As permission was granted, choosing a file from what ever folder will work, except if I try from Downloads folder it won’t work. I tested on Huawei Y9 and emulator with API 28 android 9 it did not work. However, I tested on Samsung note 4 it did work !. Both the Y9 and emulator have SD that could be the reason.
*if files were chosen from android app named “Files” there will be no issues.
any solution for this issue?
2019-06-26T20:00:00Z
code:
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));
})
}
From console log:
this is the path i get content://com.android.providers.downloads.documents/document/16
when trying to resolveNativePath(), I get this error message:
ERROR: "Attempt to invoke interface method ‘int android.database.Cursor.getColumnIndexOrThrow(java.lang.String)’ on a null object reference"
Update:
Tested on emulator and device with Android 6 API 23, Selecting files from “Downloads” folder worked without causing any issues:
-
path: 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
An image and PDF file were tested
Conclusion:
File Chooser has an issue with selecting files from “Downloads” folder. This issue arise in Android 7, 8, 9. On android version 6, file chooser worked normally.
project info:
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