Phonegap WebIntent 无法打开/访问下载的 APK 文件

Phonegap WebIntent cannot open / access a downloaded APK file

我正在从我的 Phonegap 应用程序下载我的 APK,这没有任何问题,但我无法在该文件安装后安装它。

在应该安装 APk 的 WEB INTENT 部分中,以下代码只是失败了,但在读取文件时遇到了问题。

var apkFilePath = cordova.file.externalApplicationStorageDirectory+'myapp.apk';
// Android UPDATE routine
function downloadApkAndroid(data) {
  var permissions = cordova.plugins.permissions;
   permissions.hasPermission(permissions.WRITE_EXTERNAL_STORAGE, function (status) {
     if (!status.hasPermission) {
       var errorCallback = function () {
         alert("Error: app requires storage permission");
         if (callBack && callBack !== null) {
           callBack();
         }
       };
       permissions.requestPermission(permissions.WRITE_EXTERNAL_STORAGE,
         function (status) {
           if (!status.hasPermission)
             errorCallback();
           else {
             downloadFile();
           }
         },
         errorCallback);
     }
     else {
       downloadFile();
     }
   }, null);
}

function downloadFile(){
  var fileTransfer = new FileTransfer();
  var url = "https://myappurl.com/myapp.apk";
  var uri = encodeURI(url);
  var filePath = getFilePath();

  fileTransfer.download(
    uri,
    apkFilePath,
    function (entry) {
      console.log("Download complete: " + entry.fullPath);
      promptForUpdateAndroid(entry);
    },
    function (error) {
      console.error("Download error source " + error.source);
      console.error("Download error target " + error.target);
      console.error("Download error code " + error.code);
    },
    false,
    {

    }
  );
}


/*
 * Uses the borismus webintent plugin
 */
 function promptForUpdateAndroid(entry) {
  console.log(apkFilePath);
  window.plugins.webintent.startActivity(
    {
      action: window.plugins.webintent.ACTION_VIEW,
      url: apkFilePath,
    type: 'application/vnd.android.package-archive'
  },
  function () {
  },
  function () {
    // alert('Failed to open URL via Android Intent.');
    console.log("Failed to open URL via Android Intent. URL: " + entry.fullPath);
  }
  );
}

所以通过使用 cordova-plugin-file-opener2 并更改 promptForUpdateAndroid() 来摆脱 Web Intents 来解决这个问题:

var myFilePath = cordova.file.dataDirectory+'myApp.apk';

function promptForUpdateAndroid(entry) {
  cordova.plugins.fileOpener2.open(
    myFilePath,
    'application/vnd.android.package-archive',
    {
      error : function(e) {
      console.log('Error status: ' + e.status + ' - Error message: ' + e.message);
    },
    success : function () {
      console.log('file opened successfully');
    }
  }
);

这会立即安装应用程序,但安装后不会重新打开。我要去弄明白了。