PhoneGap имеет достойный API плагинов. Вы бы написали плагин на Java, реализовав интерфейс IPlugin. Большая часть магии заключается в функции execute ().
public interface IPlugin {
/**
* Executes the request and returns PluginResult.
*
* @param action The action to execute.
* @param args JSONArry of arguments for the plugin.
* @param callbackId The callback id used when calling back into JavaScript.
* @return A PluginResult object with a status and message.
*/
PluginResult execute(String action, JSONArray args, String callbackId);
// ... more ...
}
Лучший способ начать писать плагин - это сначала написать javascript API. Обычно вы начинаете с написания пользовательского класса javascript и в каждом методе класса javascript маршалируете переменные и вызываете плагин, который вы разработали с помощью метода Phonegap.exec (). Вот подпись метода для вашей справки.
/* 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)
Вам также необходимо зарегистрировать плагин. Вы делаете это, добавляя регистрационный код внизу вашей пользовательской библиотеки JavaScript.
В приведенном ниже примере автор определил класс JavaScript BarcodeScanner и зарегистрировал его с помощью метода addConstructor.
В addConstructor выполняются два шага:
Создайте новый экземпляр BarcodeScanner в javascript и зарегистрируйте его.
Это доступно в javascript как window.plugins.barcodeScanner
Регистрирует пользовательский класс Plugin с именем службы. Название этой услуги
передается в качестве первого аргумента в PhoneGap.exec, чтобы PhoneGap
может создать экземпляр класса плагина java и вызвать для него метод execute ().
Пример регистрационного кода:
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");
});