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();
                        }
                    }

猜你喜欢

转载自www.cnblogs.com/lonelyxmas/p/10234391.html