Asynchroniczna komunikacja między Javascriptem a wtyczką Phonegap

Więc wszyscy wiedzą, że rozszerzamy klasęCordovaPlugin i nadpisujexecute() a następnie tworzy most między JS a natywną Javą (dla Androida). Dalej używamyPluginResult aby zwrócić wynik z powrotem do JS.

Wszystko to dzieje się wtedy, gdy z JS wystartuje żądanie do wtyczki Java. Moje pytanie brzmi,jak wysłać wynik z powrotem do JS (a więc do HTML)asynchronicznie?

Nie wiem czy to słowoasynchroniczny jest tutaj. Chodzi o to, że chcę wysłać coś z powrotem do JS po niebiesku (powiedzmy, gdy wifi stanie się włączone / wyłączone).

Już to zbadałem, ale nie mam nic, co pasowałoby do mojej sprawy.

To, czego próbowałem, to -

StworzyłBroadcastReceiver słuchanieWiFi wydarzenia za pomocąWifiManager klasa.Zarejestrowany odbiorca.I wreszcie, wyskakującToast gdyWiFi jest włączony / wyłączony i wysyła wynik za pomocąCallbackContext

callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, "Wifi Connected")) i do odłączenia z inną wiadomością.

MyPlugin.java

import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.PluginResult;
import org.json.JSONArray;

...

public class MyPlugin extends CordovaPlugin {
private WifiReceiver wifiBroadcastReceiver = null;
private CallbackContext callbackContext = null;

...

    public MyPlugin() {     
        wifiBroadcastReceiver = new WifiReceiver();
    ...
    }
    ...
    public boolean execute(String action, final JSONArray args,
            final CallbackContext callbackId) throws JSONException {
        IntentFilter wifiFilter = new IntentFilter(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
        cordova.getActivity().registerReceiver(wifiBroadcastReceiver, wifiFilter);
        this.callbackContext = callbackId;

    ...
    }
    public class WifiReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            final String action = intent.getAction();
            if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) {
                if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false)) {
                    Toast.makeText(cordova.getActivity(), "Wifi Connected", Toast.LENGTH_SHORT).show();
                    callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, "Wifi Connected"));
                } else {
                    Toast.makeText(cordova.getActivity(), "Wifi Disconnected", Toast.LENGTH_SHORT).show();
                    callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.ERROR, "Wifi Disconnected"));
                }
            }           
        }

}

TheToast wyskakuje alePluginResult nie jest wysyłany do JS.

PS: Słuchanie wydarzeń WiFi nie jest moim rzeczywistym problemem, chcę zreplikowaćAndroid Bluetooth Chat aplikacja w Phonegap. Musi więc być z natury asynchroniczny.

questionAnswers(2)

yourAnswerToTheQuestion