cordova使用fileOpener2開啟剛下載好的APK時報there was a problem pasring the package
阿新 • • 發佈:2018-12-07
結果:
導致結果的原因:
當使用cordova-plugin-file-transfer下載apk時 使用的儲存的路勁有問題
錯誤程式碼如下
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fs) {
fs.root.getFile(fileName, { create: true, exclusive: false }, function (fileEntry) {
console.log(fileEntry);
//呼叫fileTransfer外掛,下載檔案
downLoadFile(fileEntry.toURL(),appurl); //!!!!!
}, function(err) {
console.log(err);
});
}, function(error) {
console.log(error);
});
以上的程式碼構造的本地apk的url都會有錯導致there was a problem pasring the package
修改:
var fileName=appurl.slice( appurl.lastIndexOf('/' )+1)
var targetPath = cordova.file.externalDataDirectory;//cordova.file.documentsDirectory;//'cdvfile://localhost/persistent/apk/';//注意!
var filePath=targetPath+fileName
downLoadFile(filePath,appurl);
成功,能成功開啟下載的apk並順利跳轉安裝頁面
一下附上cordova下載伺服器apk並開啟安裝的程式碼(js)
在初步探索過程中也遇到了幾個問題以下附上參考解決的博文
謝謝
https://www.cnblogs.com/wupeng88/p/8567958.html(以幫助解決)
http://www.cnblogs.com/wupeng88/p/8533836.html(也遇到了此問題,但是我是刪除安卓平臺再新增,解決cordova platform rm android cordova platform add android –save)
function load(appurl){
var fileName=appurl.slice( appurl.lastIndexOf('/')+1)
var targetPath = cordova.file.externalDataDirectory;//cordova.file.documentsDirectory;//'cdvfile://localhost/persistent/apk/';
var filePath=targetPath+fileName
downLoadFile(filePath,appurl);
// window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fs) {
// fs.root.getFile(fileName, { create: true, exclusive: false }, function (fileEntry) {
// console.log(fileEntry);
// //呼叫fileTransfer外掛,下載檔案
// downLoadFile(fileEntry.toURL(),appurl);
// }, function(err) {
// console.log(err);
// });
// }, function(error) {
// console.log(error);
// });
}
function downLoadFile(filePath,remoteURL){
// 伺服器下載地址
var uri = encodeURI(remoteURL);
var fileTransfer = new FileTransfer();
// var fileURL = fileEntry.toURL();
var progress = window.navigator.dialogsPlus.progressStart("更新","獲取中....");
fileTransfer.download(
uri,
filePath,
function(entry){
//下載成功回撥
//開啟下載完成的檔案
//progress.hide();
cordova.plugins.fileOpener2.open(
entry.toURL(),
'application/vnd.android.package-archive',
{
error : function(e){ alert('失敗status:'+JSON.stringify(e)+ " 路徑:"+entry.toURL() )},
success : function(){ }
});
},
function(error){
//下載失敗回撥
//下載失敗的提示
progress.hide();
alert(JSON.stringify(error))
},
null,
{}
)
fileTransfer.onprogress=function(progressEvent){
if (progressEvent.lengthComputable) {
progress.setValue((progressEvent.loaded/progressEvent.total)*100);
if((progressEvent.loaded/progressEvent.total)==1){
progress.hide();
}
}
else{
alert(progressEvent.loaded+":"+progressEvent.total)
}
//alert(JSON.stringify(progressEvent))
}
}