So erhalten Sie eine Android-Service-Rückmeldung von einem Phonegap-Plugin

8

Ich versuche, ein Plugin für Phonegap (Android) zu machen, das es meinem Javascript ermöglicht, Nachrichten an einen Dienst zu senden und von diesem zu empfangen. Mein genaues Problem ist, dass, weil die Nachrichten asynchron zurückkommen, ich das PluginResult nicht an die Ausführungsfunktion des Plugins senden kann.

Dies ist der Plugin-Code:

%Vor%

Von diesem Plugin kommt das wirkliche Problem mit diesem Teil des Codes, der die Rückmeldungen und das Plugin return behandelt (das an das Javascript geht):

%Vor%

Die einzige Lösung, die ich mir vorstellen kann, ist, die Antwort entweder in einer Datenbank oder in einer Variablen zu speichern und das Javascript einen setInterval-Wert eingeben zu lassen, um nach Änderungen zu suchen. Ich mag diese Lösung jedoch nicht sehr. Ich möchte eine Art Callback-Funktion verwenden, um das Javascript wissen zu lassen, dass die Nachricht zurückgegeben wurde, aber ich habe keine Ahnung, wie. Ich würde sehr jede Hilfe und Ideen schätzen.

Danke, Vlad

    
Vlad Filip 24.10.2011, 16:35
quelle

4 Antworten

6

Das könnte eine späte Antwort sein, aber ich habe vor ungefähr 5 Monaten begonnen, mit Cordova Plugin zu arbeiten, und ich habe gerade Ihre Frage gesehen. Da du die richtige Antwort nicht gewählt hast, wollte ich deine Frage beantworten.

Angenommen, Sie haben einen asynchronen Prozess und Sie haben einen Listener und Methoden, Erfolg und Fehler, nennen wir sie onSuccess() und onFail() . Solange Sie true mit pluginResult.setKeepCallback(true) senden, bleibt der Prozess als nicht abgeschlossen, sodass Sie Ihre Plugin-Ergebnisdaten später senden können, wenn Sie mit dem Hintergrundprozess fertig sind. Hier ist ein Beispiel, werfen Sie einen Blick.

%Vor%     
osayilgan 05.03.2013, 21:59
quelle
4

Die Antwort auf mein Problem war tatsächlich in der PluginResult-Objekt und Erfolgsmethode. Ich habe ein Plugin gefunden, das das gleiche Problem hatte, um zu funktionieren, und von diesem Code konnte ich meine Antwort herausfinden. Dies ist ein onPhoneStatusChange Plugin, das gefunden werden kann hier !

Das Geheimnis liegt in diesen Zeilen:

%Vor%     
Vlad Filip 25.10.2011 09:07
quelle
1

Die generische Lösung für dieses Problem besteht darin, dass der Dienst die Antwort im permanenten Speicher speichert (wie in einer Datenbank) und dann eine Broadcast-Absicht auslöst. Dann lassen Sie einfach einen BroadcastReceiver in Ihrer ServiceClient_plugin-Klasse für die Übertragung hören. Auf diese Weise müssen Sie nicht weiter abfragen, um zu sehen, ob die Daten bereits angekommen sind.

    
Kurtis Nusbaum 24.10.2011 16:56
quelle
1

Sie können PluginResult mit success() wie folgt senden:

%Vor%

hier callback ist callbackId von execute() Funktion

    
Jaiprakash Soni 15.03.2012 12:26
quelle