1. 程式人生 > >cordova使用fileOpener2開啟剛下載好的APK時報there was a problem pasring the package

cordova使用fileOpener2開啟剛下載好的APK時報there was a problem pasring the package

結果:
這裡寫圖片描述

導致結果的原因:
當使用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))
        }

    }