Je crois qu’il est possible d’appeler des méthodes Java JavaScript (PhoneGap).
Quelqu'un sait comment faire ?? (Je sais pas comment le faire en changeant le code source de PhoneGap, mais je voudrais éviter que)
Je crois qu’il est possible d’appeler des méthodes Java JavaScript (PhoneGap).
Quelqu'un sait comment faire ?? (Je sais pas comment le faire en changeant le code source de PhoneGap, mais je voudrais éviter que)
PhoneGap est un décent de l'API du Plugin. Vous voulez écrire le plugin en Java par la mise en œuvre de la IPlugin interface. La plupart de la magie est dans le execute() de la fonction.
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 ...
}
La meilleure façon de commencer l'écriture d'un plugin est par l'écriture de l'API javascript d'abord. Vous serait typique de commencer par la rédaction d'un code javascript personnalisé de classe, et dans chaque méthode de la classe javascript, maréchal des variables et de les appeler dans le plugin que vous avez développées à l'aide de Phonegap.méthode exec (). Ici est la signature de la méthode pour votre référence.
/* 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)
Vous devez également enregistrer le Plugin. Pour ce faire, ajoutez le code d'enregistrement au bas de votre personnalisé bibliothèque javascript.
Dans l'exemple ci-dessous, l'auteur a défini un javascript BarcodeScanner classe et l'enregistre à l'aide de la addConstructor méthode.
Deux étapes sont effectuées dans le addConstructor:
Créer une nouvelle instance de BarcodeScanner en javascript et l'enregistre. C'est accessible en javascript comme fenêtre.les plugins.barcodeScanner
Inscrit le Plugin personnalisé de classe avec un nom de service. Ce service de nom est passé comme premier argument de PhoneGap.exec afin que PhoneGap peut instancier le plugin java de la classe et de l'appel de la méthode execute ().
Exemple de code d'enregistrement:
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");
});
Si quelqu'un obtient nullPointer exception en utilisant le code ci-dessus, faire super.OnCreate en premier et ensuite super... init()
J’ai trouvé cette solution ici : Phonegap Google groupe
Un grand merci à @zorglub76 pour la solution...
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.