2013-02-07 11 views
8

Ich habe ein Projekt gemacht, wo ich eine erfolgreiche Kommunikation von meinem Bluetooth-Plugin zu meinem Javascript aufgebaut habe. Aus meiner Javascript registriere ich einen Rückruf zu meinem Plugin, das Art und Weise in Java:PhoneGap setKeepCallback - Was ist das?

if (action.equals(ACTION_REGISTER_CALLBACK)) { 

      if(mJSCallback != null) { 
       pluginResult = new PluginResult(PluginResult.Status.ERROR, "An event callback has already been registered."); 
      } else { 
       mJSCallback = callbackId; 
       pluginResult = new PluginResult(PluginResult.Status.NO_RESULT); 
       pluginResult.setKeepCallback(true); 
      } 

     } 

dies natürlich in der exec-Funktion erfolgt. aufgrund der Tatsache, dass Bluetooth-Ereignisse nicht zu bestimmten Zeitpunkten kommen, habe ich einen Broadcast-Empfänger registriert, der Nachrichten an mein Javascript sendet, wenn zum Beispiel ein Gerät gefunden wird.

if(BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { 

    sendMessagetoJSCallback(new PluginResult(PluginResult.Status.OK, "Discovery finished.")); 

} 

Die Zugehörigkeit Funktion zum Senden:

public void sendMessagetoJSCallback(PluginResult res) { 
    res.setKeepCallback(true); 
    success(res, mJSCallback); 
} 

Was ich nicht wirklich verstehen, dass Zusammenhang ist, was setKeepCallback in diesen verschiedenen Funktionen bietet. Ich dachte, es wäre eine Dokumentation, aber es gibt keine.

Kann mir jemand sagen? Ich orientierte die Entwicklung auf https://github.com/phonegap/phonegap-plugins/tree/master/Android/PhoneListener

Antwort

3

Dies bedeutet, dass der Rückruf auf der JS-Seite für weitere Aufrufe von nativen (Java) Seite auf JS-Seite gehalten wird. Es ist irgendwo in der cordova.js Code verwaltet.

Wenn Sie zum Beispiel sieht an der Netzwerk-Informationen Plugin: https://github.com/apache/cordova-plugin-network-information/blob/master/src/android/NetworkManager.java#L221 Sie sehen, dass auf jedem Netzwerkstatus (WIFI, 3G, 4G, offline, ...) das Plugin das Ergebnis an JS senden und mit dem Rückruf zu halten Jeder Aufruf wird im selben Erfolgsrückruf in der JS-Site empfangen.