版权声明:本文为博主原创文章,欢迎转载,转载请注明出处。 https://blog.csdn.net/luyu13141314/article/details/79650147
最近利用 cordova 的 File Transfer 做app的强制更新功能,app是基于ionic+AngularJS ,我只打包了android的。
我想打包到小米6(安卓7以上)。在强制更新下载apk的时候。始终下载失败,报错 Permission denied 。
后来得知
详情点击:查看权限相关
最后我是通过 cordova-plugin-android-permissions 这个cordova插件来处理权限的问题。
下面说下主要代码:非常简单。强制更新部分我就省略了,网上很多案例。
1。安装插件
cordova plugin add cordova-plugin-file // 文件系统
cordova plugin add cordova-plugin-file-transfer //文件传输系统
cordova plugin add cordova-plugin-android-permissions //处理权限
2。利用 File Transfer 下载apk
File Transfer插件详情:查看
以下2种两种写法都可以,其中一种我注释了。
- $cordovaFileTransfer.download
- fileTransfer.download
//下载apk
function downloadFile() {
$ionicLoading.show({
template: "已经下载:0%"
});
var url = $localstorage.getJSON('address').appDownloadUrl + 'zhw' + $rootScope.serverAppVersion + '.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();
}
})
});
// $ionicPlatform.ready(function() {
// // File for download
// var url = $localstorage.getJSON('address').appDownloadUrl + 'zhw' + $rootScope.serverAppVersion + '.apk';
// // File name only
// var filename = url.split("/").pop();
// // Save location
// var targetPath = cordova.file.externalRootDirectory + 'Download/' + filename;
// var fileTransfer = new FileTransfer();
// var uri = encodeURI(url);
// var trustHosts = true
// var options = {};
// fileTransfer.download(
// uri,
// targetPath,
// function(entry) {
// console.log("下载成功!");
// console.log("文件保存位置: " + entry.toURL());
// },
// function(error) {
// },
// trustHosts,
// options
// );
// });
3。解决权限问题
cordova-plugin-android-permissions 插件详情:查看
//检查权限
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);
}
}