原文:cordova之File Transfer (Permission denied) 权限导致下载失败 - 简书

在文件上传时,由于权限问题,会报错(Permission denied),安卓6.0以上会有此问题。

通过 cordova-plugin-android-permissions 这个cordova插件来处理权限的问题。

app自动更新

1.安装插件

cordova plugin add cordova-plugin-file // 文件系统

 cordova plugin add cordova-plugin-file-transfer //文件传输系统

 cordova plugin add cordova-plugin-android-permissions //处理权限

cordova plugin add cordova-plugin-file-opener2 // 文件下载

2.代码

//下载apk
function downloadFile() {
$ionicLoading.show({
template: "已经下载:0%"
});
var url = "http://192.168.0.1:8080/myApp.apk"; //可以从服务端获取更新APP的路径
var filename = url.split("/").pop();
var targetPath = cordova.file.externalRootDirectory + filename; //APP下载存放的路径,可以使用cordova file插件进行相关配置
var trustHosts = true;
var options = {};
$cordovaFileTransfer.download(url, targetPath, options, trustHosts).then(function(result) {
// 打开下载下来的APP
$cordovaFileOpener2.open(targetPath, 'application/vnd.android.package-archive').then(function() {
// 成功
}, function(err) {
// 错误
});
$ionicLoading.hide();
}, function(err) {
console.log(err)
$ionicLoading.hide();
}, function(progress) {
//进度,这里使用文字显示下载百分比
$timeout(function() {
var downloadProgress = (progress.loaded / progress.total) * 100;
$ionicLoading.show({
template: "已经下载:" + Math.floor(downloadProgress) + "%"
});
if (downloadProgress > 99) {
$ionicLoading.hide();
}
})
});
} // 如果下载成功后无法自动打开,错误 exposed beyond app through Intent.getData() ,是版本不支持,请修改platforms>android中的AndroidManifest.xml,尽量保持android:targetSdkVersion版本在24以下,这个主要影响Android 8.x版本,
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="23" />
// 权限问题
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> //检查权限
var permissions = cordova.plugins.permissions;
permissions.hasPermission(permissions.READ_EXTERNAL_STORAGE, checkPermissionCallback, null); function checkPermissionCallback(status) {
if (!status.hasPermission) { // 未取得权限
var errorCallback = function() {
console.warn('Storage permission is not turned on');
}
permissions.requestPermission(
permissions.READ_EXTERNAL_STORAGE,
function(status) {
if (!status.hasPermission) {
errorCallback();
} else {
// continue with downloading/ Accessing operation
downloadFile();
}
},
errorCallback);
}else{
// 取得权限直接执行代码
downloadFile();
}
}

cordova之File Transfer (Permission denied) 权限导致下载失败 - 简书的更多相关文章

  1. Linux:外网域名防火墙设置导致下载失败

    问题现象: 通过IE从服务器下载文件时,提示Can't read from connection: Connection reset by peer. 别的现场都是好的,只有该现场有这个问题.所以,一 ...

  2. 启动zabbix-server/agent报错:cannot open "/etc/zabbix/logs/zabbix_server.log": [13] Permission denied

    注:该报错解决方式同样适用于zabbix-agent 启动zabbix-server报错信息如下: 2月 27 16:52:44 localhost.localdomain zabbix_server ...

  3. Starting nginx: nginx: [emerg] bind() to 0.0.0.0:8088 failed (13: Permission denied) nginx 启动失败

     Starting nginx: nginx: [emerg] bind() to 0.0.0.0:8088 failed (13: Permission denied)     nginx 启动失败 ...

  4. bash: ./LM35_make_fs: Permission denied 解决办法

    执行命令的时候 ./LM35_make_fs 遇到 permission denied, bash: ./LM35_make_fs: Permission denied权限的问题,可以运行 ls -l ...

  5. 关于Mac或Linux下GO的Permission denied提示错误

    有时候当你下载第三方库的时候,编译时会提示Permission denied 权限不足, 出现这种错误因为权限不够.其中一种办法是需要把你项目目录和go的pck.bin权限放开. chmod -R 7 ...

  6. Android adb shell data目录,Permission denied

    Android adb shell进入data目录,Permission denied 权限被拒绝 在shell里面输入su root,去申请root权限,注意:有小部分手机是需要点击授权,再次执行c ...

  7. 启动docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

    启动docker提示: docker: Got permission denied while trying to connect to the Docker daemon socket at uni ...

  8. 解决Docker运行命令时提示"Got permission denied while trying to connect to the Docker daemon socket"类情况

    Docker安装命令: 解决Docker运行命令时提示"Got permission denied while trying to connect to the Docker daemon ...

  9. Permission denied (publickey),Gitlab & Github 多ssh key 冲突 导致的权限问题

    Github 多ssh key导致的权限问题 :Permission denied (publickey) 公司用gitlib搭建了git服务器,自己已有github账号,用ssh-keygen分别生 ...

随机推荐

  1. Java Web学习总结(17)——JSP属性范围

    所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得 ...

  2. amazeui学习笔记--css(常用组件6)--图标Icon

    amazeui学习笔记--css(常用组件6)--图标Icon 一.总结 1.关注用法即可:在 HTML 上添加添加 am-icon-{图标名称} class. <span class=&quo ...

  3. delete noprompt archivelog 报错ORA-00245,RMAN-08132

    在RMAN执行  delete noprompt archivelog until time 'sysdate-1';  报错   ORA-00245: control file backup fai ...

  4. POJ 3187 Backward Digit Sums 枚举水~

    POJ 3187  Backward Digit Sums http://poj.org/problem?id=3187 题目大意: 给你一个原始的数字序列: 3   1   2   4  他可以相邻 ...

  5. (转)Oracle EXP-00091解决方法

    转自:http://blog.csdn.net/dracotianlong/article/details/8270136 EXP-: 正在导出有问题的统计信息. . . 正在导出表 WF_GENER ...

  6. linux查找keyword在php出现的次数

    查找CleverCode在当前文件夹以及子文件夹,全部的php出现大于0的次数. # find -type f -name '*.php' | xargs grep CleverCode ./*.ph ...

  7. javascript面对对象编程 之继承

    上一篇博客中为大家介绍了javascript面向对象编程原则的封装,今天为大家介绍继承.在javascript中没有类的概念,全部不能像c#.java语言那样.直接的用类去继承类.比方如今有比方.如今 ...

  8. [Node] Run Local DevDependencies from the Command Line with npx

    In the past, you've needed to either write a package.json script or use the node_modules/.bin direct ...

  9. HDU 1248 寒冰王座 完全背包

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1248 中文题,大意就不说了. 第一道完全背包题,跟着背包九讲做的. 和0-1背包的区别在于所不同的是每种 ...

  10. [疯狂Java]JDBC:事务管理、中间点、批量更新

    1. 数据库事务的概念:     1) 事务的目的就是为了保证数据库中数据的完整性.     2) 设想一个银行转账的过程,假设分两步,第一步是A的账户-1000,第二步是B的账户+1000.这两个动 ...