PhoneGap hat eine anständige Plugin API. Sie würden das Plugin in Java schreiben, indem Sie die IPlugin-Schnittstelle implementieren. Der Großteil der Magie liegt in der Funktion execute().
Der beste Weg, um mit dem Schreiben eines Plugins zu beginnen, ist das Schreiben der JavaScript-API zuerst. Sie würden normalerweise mit dem Schreiben einer benutzerdefinierten JavaScript-Klasse beginnen und in jeder Methode der JavaScript-Klasse die Variablen marshalieren und in das von Ihnen entwickelte Plug-in mit der Phonegap.exec() -Methode aufrufen. Hier ist die Methodensignatur für Ihre Referenz.
/* src/com/phonegap/api/PluginManager.java */
/**
* Receives a request for execution and fulfills it by finding the appropriate
* Java class and calling it's execute method.
*
* PluginManager.exec can be used either synchronously or async. In either case, a JSON encoded
* string is returned that will indicate if any errors have occurred when trying to find
* or execute the class denoted by the clazz argument.
*
* @param service String containing the service to run
* @param action String containt the action that the class is supposed to perform. This is
* passed to the plugin execute method and it is up to the plugin developer
* how to deal with it.
* @param callbackId String containing the id of the callback that is execute in JavaScript if
* this is an async plugin call.
* @param args An Array literal string containing any arguments needed in the
* plugin execute method.
* @param async Boolean indicating whether the calling JavaScript code is expecting an
* immediate return value. If true, either PhoneGap.callbackSuccess(...) or
* PhoneGap.callbackError(...) is called once the plugin code has executed.
*
* @return JSON encoded string with a response message and status.
*/
@SuppressWarnings("unchecked")
public String exec(final String service, final String action,
final String callbackId, final String jsonArgs,
final boolean async)
Sie müssen auch das Plugin registrieren. Dazu fügen Sie den Registrierungscode am Ende Ihrer benutzerdefinierten JavaScript-Bibliothek hinzu.
Im folgenden Beispiel definierte der Autor eine JavaScript BarcodeScanner-Klasse und registrierte sie mit der addConstructor-Methode.
Zwei Schritte werden in dem addConstructor durchgeführt:
eine neue Instanz von Barcodescanner in Javascript erstellen und registriert sie. Dies ist in JavaScript als window.plugins.barcodeScanner verfügbar.
Registriert die benutzerdefinierte Plugin-Klasse mit einem Dienstnamen. Dieser Servicename wird als erstes Argument an PhoneGap.exec übergeben, so dass PhoneGap die Java-Plugin-Klasse instanziieren und die execute() -Methode darauf aufrufen kann.
Beispielregistrierungscode:
PhoneGap.addConstructor(function() {
/* The following registers an instance of BarcodeScanner in window.plugins.barcodeScanner */
PhoneGap.addPlugin('barcodeScanner', new BarcodeScanner());
/* The following associates a service name BarcodeScanner with a class com.beetight.barcodescanner.BarcodeScanner */
/* The service name is the first argument passed into PhoneGap.exec */
PluginManager.addService("BarcodeScanner","com.beetight.barcodescanner.BarcodeScanner");
});
hmm, dieses Beispiel ist toll, aber ich erhalte eine Nullpointer-Ausnahme auf AppView, so scheint es null zu sein. Wo initialisierst du das Objekt? – dan
Es funktioniert nicht, es sei denn, die Methoden sind öffentlich! gut gemacht! – dan
hinzufügen super.init(); Wie @Karfield unten erwähnt hat die Nullpointer Exception für mich behoben. –