Instale o plugin Intent no Phonegap 3.0

Olá, estou trabalhando em um projeto Phonegap no Android onde, entre outros, tenho uma página com um botão que irá disparar um processo de download para sdcard / download / e depois um processo de instalação.

Nessa dica vou escrever minha solução que funciona no momento. Provavelmente existem soluções melhores, mas ainda estou aprendendo todas essas tecnologias e estou feliz que pelo menos funcione.

Portanto, a primeira etapa seria criar uma classe Java em seu projeto que estenda a classe CordovaPlugin. Eu o chamei de “InstallIntent.java”. É uma aula muito simples, onde tudo o que importa é o método “execute”:

import java.io.File;

import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.PluginResult;
import org.json.JSONArray;

import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;

public class InstallIntent extends CordovaPlugin {

@Override
public boolean execute(String action, final JSONArray args, final CallbackContext callbackContext) {
if (action.equals("install")) {
cordova
.getThreadPool().execute(new Runnable() {//
@Override
public void run() {
String apkPath = Environment.getExternalStorageDirectory().toString() + "/download/YourAPK.apk";
Intent install = new Intent(Intent.ACTION_VIEW);
install
.setDataAndType(Uri.fromFile(new File(apkPath)),"application/vnd.android.package-archive");
cordova
.getActivity().startActivity(install);
Log.d("my tag", "after the install action");
//showToast("App cache is deleted.","short");
}
});
callbackContext
.sendPluginResult(new PluginResult(PluginResult.Status.OK));
return true;
} else {
Log.e("PhoneGapLog", "CacheCleaner Plugin: Error: " + PluginResult.Status.INVALID_ACTION);
callbackContext
.sendPluginResult(new PluginResult(PluginResult.Status.INVALID_ACTION));
return false;
}
}
}

A ação neste caso é chamada de “instalar” e é importante, pois será chamada a partir do Javascript.

No seu projeto Phonegap, na pasta assets / www / js específica, crie install-intent.js

cordova.define("cordova/plugin/installation", function (require, exports, module) {
var exec = require("cordova/exec");
module.exports = {
install
: function (win, fail) {
exec(win, fail, "InstallIntent", "install", []); //InstallIntent is the name of the Java class and install is the method called from the front end side.
}
};
});

No arquivo de manifesto, incluí as seguintes permissões:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RESTART_PACKAGES"/>

Em seu index.html, inclua cordova.js, arquivos install-intent.js e o arquivo com seus scripts personalizados, por exemplo custom.js onde você pode chamar seu install_intent assim:

var installation = cordova.require("cordova/plugin/installation");
installation
.install(function() {
console
.log("PhoneGap Plugin: InstallIntent: callback success");
},
function() {
console
.log("PhoneGap Plugin: InstallIntent: callback error");
}
);

No final, adicione a seguinte linha ao seu config.xml (aquele em ProjectName plataformas android res xml)

<feature name="InstallIntent">
<param name="android-package" value="com.your.package.name.InstallIntent" />
</feature>

Novamente, este plugin irá disparar um processo de instalação do arquivo .apk do diretório externo / download. Espero que ajude alguém.