cordova之File Transfer (Permission denied) 权限导致下载失败 - 简书
原文: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) 权限导致下载失败 - 简书的更多相关文章
- Linux:外网域名防火墙设置导致下载失败
问题现象: 通过IE从服务器下载文件时,提示Can't read from connection: Connection reset by peer. 别的现场都是好的,只有该现场有这个问题.所以,一 ...
- 启动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 ...
- 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 启动失败 ...
- bash: ./LM35_make_fs: Permission denied 解决办法
执行命令的时候 ./LM35_make_fs 遇到 permission denied, bash: ./LM35_make_fs: Permission denied权限的问题,可以运行 ls -l ...
- 关于Mac或Linux下GO的Permission denied提示错误
有时候当你下载第三方库的时候,编译时会提示Permission denied 权限不足, 出现这种错误因为权限不够.其中一种办法是需要把你项目目录和go的pck.bin权限放开. chmod -R 7 ...
- Android adb shell data目录,Permission denied
Android adb shell进入data目录,Permission denied 权限被拒绝 在shell里面输入su root,去申请root权限,注意:有小部分手机是需要点击授权,再次执行c ...
- 启动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 ...
- 解决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 ...
- Permission denied (publickey),Gitlab & Github 多ssh key 冲突 导致的权限问题
Github 多ssh key导致的权限问题 :Permission denied (publickey) 公司用gitlib搭建了git服务器,自己已有github账号,用ssh-keygen分别生 ...
随机推荐
- Stable Matching (Gale Sharpley Algorithm)
稳定婚配问题:n个男生n个女生.当中每一个人都有自己心仪的列表. 问怎样达成稳定的匹配(比方, b想B求婚,可是B已有的对象的优先级高于b,此时b的魅力不足以拆散B所处的那一对,即达到稳定状态.) ( ...
- DOM相关知识总结
DOM相关: 1.获取DOM元素 document.getElementById document.getElementsByName document.getElementsByTagName do ...
- python3 pygame 坦克自动移动
让坦克自动跑起来 这里需要一个坦克的图. 放到与脚本同一目录. 好,我们就让这个坦克自动跑. 下面上代码: # !/usr/bin/env python # -*- coding:utf-8 -*- ...
- 51NOD——N 1107 斜率小于0的连线数量
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1107 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 ...
- C语言创建删不掉的目录
上一篇博客写了一个杀不死的进程,如今再写一个删不掉的目录(文件同理),所谓删不掉不是真的删不掉而是删掉后立即又一次创建. 代码例如以下: #include <stdio.h> #inclu ...
- js进阶 12-8 如何知道上一个函数的返回值是什么(如何判断上一个函数是否执行成功)
js进阶 12-8 如何知道上一个函数的返回值是什么(如何判断上一个函数是否执行成功) 一.总结 一句话总结:event的result属性即可. 1.event的result属性的实际应用场景是什么? ...
- Java RMI使用
1. Java RMI介绍 RMI:远程方法调用(Remote Method Invocation).能够让在某个java虚拟机上的对象像调用本地对象方法一样调用另一个java 虚拟机中的对象上的方法 ...
- FeatureLayer,FeatureDataset,FeatureClass,Feature的区别与联系总结
duckweeds原文 FeatureLayer,FeatureDataset,FeatureClass,Feature几个概念一点点总结,欢迎指教 刚学AE,其中很多概念都模糊不清.经过一段时间的摸 ...
- 嵌入式/X86下linux系统死机及内存优化
一. CPU 过高或死锁导致系统卡死 1. CPU占用过高 (1)开线程太多导致CPU占用过高,系统卡死 解决:优化应用层业务逻辑,有些业务不必开线程就不开 (2)频繁清缓存导致读spi-flash ...
- 【35.37%】【codeforces 556C】Case of Matryoshkas
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...