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

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com