2013-02-07 6 views
8

Ho realizzato un progetto, in cui ho stabilito una comunicazione di successo dal mio plug-in bluetooth al mio javascript. Dal mio Javascript registro un callback al mio plugin in questo modo in java:PhoneGap setKeepCallback - Che cosa fa?

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

     } 

questo è ovviamente fatto nella funzione exec. a causa del fatto, che gli eventi bluetooth non arrivano in determinati momenti, ho registrato un ricevitore broadcast, che invia messaggi al mio javascript, quando viene trovato un dispositivo per esempio.

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

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

} 

La funzione di appartenenza per l'invio:

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

Quello che non ho davvero capito in quel contesto è, cosa fa setKeepCallback in quelle diverse funzioni. Pensavo che ci sarebbe stata una documentazione, ma non c'è.

Qualcuno può dirmelo? Ho orientato lo sviluppo su https://github.com/phonegap/phonegap-plugins/tree/master/Android/PhoneListener

risposta

3

Ciò significa che la richiamata sul lato JS viene mantenuta per ulteriori chiamate da lato nativo (Java) a lato JS. È gestito da qualche parte nel codice cordova.js.

Se si guarda ad esempio il plugin rete-Informazioni: https://github.com/apache/cordova-plugin-network-information/blob/master/src/android/NetworkManager.java#L221 si vede che in ogni stato della rete (Wi-Fi, 3G, 4G, non in linea, ...) il plugin inviare il risultato da JS e con il mantenimento del callback ogni chiamata viene ricevuta nello stesso callback riuscito nel sito JS.