我在Ionic移动应用程序上使用cordova-plugin-file
和cordova-plugin-file-transfer
将一些文件下载到Android设备,该设备可以使用pdf,word,excel等原生应用程序打开。这个插件在Marshmallow os更新之前完美运行。
现在正在抛出"exception":"/storage/emulated/0/logo_radni.png: open failed: EACCES (Permission denied)"}
。
在config.xml文件中我也添加了以下权限。
<platform name="android">
<preference name="AndroidPersistentFileLocation" value="Compatibility" />
<preference name="AndroidExtraFilesystems" value="files,files-external,documents,sdcard,cache,cache-external,assets,root" />
</platform>
这是在以前的android os版本上工作。这是我的代码示例
angular.module('starter.controllers', ['ionic', 'ngCordova'])
.controller('DashCtrl', function ($scope, $ionicPlatform, $cordovaFileTransfer) {
$scope.downloadFile = function () {
$ionicPlatform.ready(function () {
// File for download
var url = "http://www.gajotres.net/wp-content/uploads/2015/04/logo_radni.png";
// File name only
var filename = url.split("/").pop();
// Save location
var targetPath = cordova.file.externalRootDirectory + filename;
$cordovaFileTransfer.download(url, targetPath, {}, true).then(function (result) {
console.log('Success');
}, function (error) {
console.log(JSON.stringify(error));
}, function (progress) {
// PROGRESS HANDLING GOES HERE
});
});
};
})
注意:
我需要将文件下载到cordova.file.externalRootDirectory
以访问其他应用程序,例如pdf reader,word,excel..etc
插件参考:
https://github.com/apache/cordova-plugin-file
https://github.com/apache/cordova-plugin-file-transfer
http://ngcordova.com/docs/plugins/fileTransfer/
任何人都有想法解决这个问题吗?
答案 0 :(得分:7)
调查结束后,我找到了问题的根本原因。由于OS升级到Marshmallow,此权限问题错误。他们已经更改了许可授予程序。在API级别23之后,应用程序在安装时将无法获得许可。用户必须在使用应用程序时授予权限。因此,我必须明确安装插件以在使用设备资源时授予权限。
我写了一篇关于此的快速博客文章,与社区分享。还要感谢@Beat :))
任何人都可以参考http://anishantha87.blogspot.com/2016/10/read-and-write-permission-for-storage.html进行快速示例应用。
您可以找到适用于操作系统升级权限的Android API参考here。
希望这对其他人有所帮助。
干杯!
答案 1 :(得分:-2)
根据cordova-plugin-file
文档,您必须通过将此权限添加到config.xml
来设置写入外部存储的权限:
<platform name="android">
<.../>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<.../>
</platform>
我认为文档理解起来有点棘手,但您可以在docs of cordova-plugin-file中找到所需的信息:
sdcard :全局外部文件存储目录(如果安装了SD卡,则为SD卡的根目录)。您必须具有android.permission.WRITE_EXTERNAL_STORAGE权限才能使用此功能。
为了进一步阅读,我可以在相关摘要中推荐官方android
docs:
访问外部存储空间 要在外部存储上读取或写入文件,您的应用必须获取READ_EXTERNAL_STORAGE或WRITE_EXTERNAL_STORAGE系统权限...