cordova之File Transfer (Permission denied) 权限导致下载失败

版权声明:本文为博主原创文章,欢迎转载,转载请注明出处。 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种两种写法都可以,其中一种我注释了。

扫描二维码关注公众号,回复: 5659497 查看本文章
  • $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);
                        }
                    }

猜你喜欢

转载自blog.csdn.net/luyu13141314/article/details/79650147