cordova之File Transfer (Permission denied) 許可權導致下載失敗 - 簡書
阿新 • • 發佈:2019-01-07
原文:
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();
}
}