1. 程式人生 > >cordova之File Transfer (Permission denied) 許可權導致下載失敗 - 簡書

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