【问题标题】:Can't update apk with FileTransfer and WebIntent plugin无法使用 FileTransfer 和 WebIntent 插件更新 apk
【发布时间】:2015-11-02 13:26:35
【问题描述】:

我使用 ionic 框架制作了一个应用程序。对于自动更新功能,我使用 FileTransfer 插件下载 apk 和 WebIntent 开始安装。但是出现错误:“解析错误,解析包时出现问题”。 下载的apk肯定没问题,路径是/data/data/com.myapp.app/cache/。我可以手动在文件资源管理器中开始安装。即使我将好的apk从我的PC复制到手机,错误仍然一样。

以下代码用于下载和安装:

$scope.updateVersion = function(){
  window.requestFileSystem(LocalFileSystem.TEMPORARY, 10*1024*1024, function(fileSystem){
    fileSystem.root.getFile($scope.appNameWithVersion, {
        create: true
      }, function(fileEntry) {

        var localPath = fileEntry.toURL();
        var fileTransfer = new FileTransfer();        

        fileTransfer.onprogress = function(e){
          console.log(e);
        };


        fileTransfer.download(
          $scope.updateUrl,  // set before
          localPath, 
          function(entry) {
            alert('download ok');
            window.plugins.webintent.startActivity({
                  action: window.plugins.webintent.ACTION_VIEW,
                  url: localPath,
                  type: 'application/vnd.android.package-archive'
                },
                function(){},
                function(e){
                    alert('Error launching app update');
                }
            );                              

          }, 
          function (error) {
            alert("Error downloading APK: " + error.code);
          }, 
          true, {
            //options for NULL
          });

      }, function(evt){
          alert("Error downloading apk: " + evt.target.error.code);                                               
      });
  }, function(evt){
    alert("Error preparing to download apk: " + evt.target.error.code);
  });    
}

【问题讨论】:

    标签: android angularjs ionic


    【解决方案1】:

    options不要使用null,告诉文件传输插件你要下载的文件是android应用包:

    var options = new FileUploadOptions();
    options.mimeType = "application/vnd.android.package-archive";
    
    fileTransfer.download(
              $scope.updateUrl,  // set before
              localPath, 
              function(entry) {
                alert('download ok');
                window.plugins.webintent.startActivity({
                      action: window.plugins.webintent.ACTION_VIEW,
                      url: localPath,
                      type: 'application/vnd.android.package-archive'
                    },
                    function(){},
                    function(e){
                        alert('Error launching app update');
                    }
                );                              
    
              }, 
              function (error) {
                alert("Error downloading APK: " + error.code);
              }, 
              true,options);
    

    【讨论】:

    • 感谢您的帮助。但它不起作用。下载的 apk 可以从其他文件资源管理器手动安装。所以我认为这不是apk文件的问题。我尝试使用另一个应用程序 apk 文件,同样的错误。
    • 嗯。那么也许你的问题在 webintent.startActivity.. 试试这个插件github.com/pwlin/cordova-plugin-file-opener2
    • 哦..我的错。下载文件,无需先创建文件。非常感谢!
    【解决方案2】:

    哦..这是我的错。使用 FileTransfer 下载时。无需先创建文件。所以不需要下面的代码:

      window.requestFileSystem(LocalFileSystem.TEMPORARY, 10*1024*1024, function(fileSystem){
        fileSystem.root.getFile($scope.appNameWithVersion, {
            create: true
          }, function(fileEntry) {
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-18
      • 2017-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多