È possibile creare un plug-in personalizzato per chiamare qualsiasi metodo dal lato nativo. Creare un file JavaScript separato, dire customplugin.js, e mettere questo in esso:
var CustomPlugin = {};
CustomPlugin.callNativeMethod = function() {
cordova.exec(null, null, "CustomPlugin", "callNativeMethod", []);
};
ora sul lato nativo di Java, creare una nuova classe e il nome CustomPlugin.java, quindi aggiungere questo:
package com.yourpackage;
import org.apache.cordova.CordovaWebView;
import org.apache.cordova.api.CallbackContext;
import org.apache.cordova.api.CordovaInterface;
import org.apache.cordova.api.CordovaPlugin;
import com.yourpackage.MainActivity;
public class CustomPlugin extends CordovaPlugin
{
private static final String TAG = "CustomPlugin";
private CallbackContext callbackContext = null;
private MainActivity activity = null;
/**
* Override the plugin initialise method and set the Activity as an
* instance variable.
*/
@Override
public void initialize(CordovaInterface cordova, CordovaWebView webView)
{
super.initialize(cordova, webView);
// Set the Activity.
this.activity = (MainActivity) cordova.getActivity();
}
/**
* Here you can delegate any JavaScript methods. The "action" argument will contain the
* name of the delegated method and the "args" will contain any arguments passed from the
* JavaScript method.
*/
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException
{
this.callbackContext = callbackContext;
Log.d(TAG, callbackContext.getCallbackId() + ": " + action);
if (action.equals("callNativeMethod"))
{
this.callNativeMethod();
}
else
{
return false;
}
return true;
}
private void callNativeMethod()
{
// Here we simply call the method from the Activity.
this.activity.callActivityMethod();
}
}
assicurarsi di mappare i plugin nel file config.xml aggiungendo questa linea:
...
<feature name="CustomPlugin">
<param name="android-package" value="com.yourpackage.CustomPlugin" />
</feature>
...
Ora per lanciare il plugin dal vostro index.html si può semplicemente chiamare il metodo JavaScript:
CustomPlugin.callNativeMethod();
L'utilizzo di questo metodo consente di impostare molti metodi personalizzati in modo conveniente. Per ulteriori informazioni, consultare la guida allo sviluppo del plugin PhoneGap here.
Grazie @suprnova tua la risposta è utile forse funziona per la versione precedente ma ho notato che sto usando l'ultima versione di phonegap (3.0) e ho codificato questo, ma non funziona. Ho ricevuto questo errore exec() chiamata al plugin sconosciuto, ho trovato qualcosa di simile qui http://stackoverflow.com/questions/17974301/phonegap-3-plugin-exec-call-to-unknown-plugin – nramirez
Hai ragione, questo non funzionerà con PhoneGap 3.0, ma penso che sia perché la mappatura dei plugin che ho usato nella risposta precedente è deprecata. Tuttavia, ho aggiornato la mia risposta con il mapping PhoneGap 3.0. In sostanza, l'elemento ' 'nel file config.xml è deprecato, è necessario utilizzare invece l'elemento' '. –
kieranroneill
Sì! Ci sto lavorando! Non appena avrò la soluzione a questa domanda, posterò la risposta! – nramirez