我在Ionic移动应用程序上使用cordova-plugin-file-Transfer和cordova-plugin-file-chooser将一些文件上传到Android设备,该设备可以使用pdf、word、excel等原生应用程序打开...等
它现在抛出“异常”:/storage/emulated/0/Download/pdf-test.pdf:open-failed:EACCES(权限被拒绝)“}”。
openFile() {
console.log("openFile");
this.fileChooser.open()
.then(uri => {
console.log(uri)
const fileTransfer: FileTransferObject = this.transfer.create();
let options: FileUploadOptions = {
fileKey: 'files',
fileName: 'name.doc',
params: { resume: uri},
chunkedMode: false,
headers: {
'token': this.token,
'sid': this.sid,
'user': this.user,
'to': this.to,
'node': this.node,
'type': 'doc',
'cap': this.cap
}
}
console.log("Headers" + JSON.stringify(options));
fileTransfer.upload(uri,this.apiurl, options)
.then((data) => {
// success
console.log("Response data ->>>>>>> :- " + JSON.stringify(data));
alert("success" + JSON.stringify(data));
}, (err) => {
// error
console.log("Error data ->>>>>>> :- " + JSON.stringify(err));
alert("error" + JSON.stringify(err));
});
})
.catch(e => console.log(e));
}
我还添加了对AndroidM的权限anifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Android权限
这个插件是为支持Android新权限检查机制而设计的。
从Android 6.0开始,Android权限检查机制发生了变化。过去,权限是由用户决定安装应用程序时授予的。现在,权限应该由用户在使用应用程序时授予。
因为你们(开发者)正在使用的旧Android插件可能不支持这种新机制,或者已经停止更新。因此,要么寻找一个新的插件来解决这个问题,要么尝试在旧插件中添加机制。如果你不想做这些,你可以试试这个插件。https://ionicframework.com/docs/native/android-permissions/
filePermission() {
this.androidPermissions.checkPermission(this.androidPermissions.PERMISSION.WRITE_EXTERNAL_STORAGE).then(
result => console.log('Has permission?', result.hasPermission),
err => this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.WRITE_EXTERNAL_STORAGE)
);
}
并且在清单中权限集是正确的
更新 结果发现我调用open和close FileOutputStream的频率太高了,这会在某个时候抛出FileNotFoundException。听起来更像是线程问题。
java.io.FileNotFoundException:/Storage/Emulated/0/WhatsApp/Media/WhatsApp Documents/api.txt:open失败:EACCES(拒绝权限)
在其他设备中没有发生这种情况,我测试的设备:、、
问题内容: 我已经加入包括。 当我尝试在Nexus5(Android 6.0)中运行我的应用程序时,它引发了如下异常: 然后我尝试了另一部Android手机(Android 5.1),一切正常。代码如下: Android 6.0在权限方面有区别吗? 问题答案: 在Android 6(Marshmallow)中,即使用户在安装时接受了你的所有权限,他们仍可以稍后决定从你手中夺走其中一些权限。 快速解