2013-02-07 20 views
8

Zrobiłem projekt, w którym nawiązałem pomyślną komunikację z wtyczki bluetooth do mojego javascript. Z mojej JavaScript rejestruję wywołanie zwrotne do mojej wtyczki w ten sposób w java:PhoneGap setKeepCallback - co to jest?

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); 
      } 

     } 

jest to oczywiście wykonywane w funkcji exec. ze względu na to, że zdarzenia bluetooth nie przychodzą w określonych momentach czasu, zarejestrowałem odbiornik, który wysyła wiadomości do mojego javascriptu, gdy na przykład znajduje się takie urządzenie.

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

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

} 

Funkcja przynależności do wysyłania:

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

Co ja naprawdę nie rozumiem w tym kontekście to, co setKeepCallback robi w tych różnych funkcji. Myślałem, że będzie dokumentacja, ale nie ma.

Czy ktoś może mi powiedzieć? Ukierunkowałem rozwój na https://github.com/phonegap/phonegap-plugins/tree/master/Android/PhoneListener

Odpowiedz

3

Oznacza to, że wywołanie zwrotne po stronie JS jest przechowywane dla dalszych wywołań ze strony rodzimej (Java) do strony JS. Jest gdzieś zarządzany w kodzie cordova.js.

Jeśli spojrzeć na przykład wtyczki sieciowe-informacyjnym: https://github.com/apache/cordova-plugin-network-information/blob/master/src/android/NetworkManager.java#L221 widać, że na każdym stanie sieci (WiFi, 3G, 4G, offline, ...) plugin wysłać wynik do JS i utrzymanie zwrotnego każde wywołanie jest odbierane w tym samym oddzwanianiu powodzenia w witrynie JS.