Асинхронная связь между Javascript и плагином PhoneGap

Итак, все знают, что мы делаем расширение классаCordovaPlugin и переопределитьexecute() а затем создает мост между JS и нативной Java (для Android). Далее используемPluginResult вернуть результат обратно в JS.

Итак, все это происходит, когда от JS поступает запрос к плагину Java. Мой вопроскак отправить результат обратно в JS (и, следовательно, в HTML)асинхронно?

Я не знаю, если словоасинхронный прямо здесь. Дело в том, что я хочу послать что-то обратно в JS на ровном месте (скажем, когда wifi станет включенным / выключенным).

Я уже исследовал это, но не нашел ничего подходящего для моего случая.

Я попробовал вот что:

СозданоBroadcastReceiver слушаяWiFi события с использованиемWifiManager класс.Зарегистрирован получатель.И наконец, выскочитьToast когдаWiFi включен / отключен, и отправка результата с помощьюCallbackContext

callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, "Wifi Connected")) и для отключенных с другим сообщением.

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

}

Toast треск ноPluginResult не отправляется в JS.

PS: Прослушивание событий WiFi не является моей реальной проблемой, я хочу повторитьAndroid Bluetooth Chat приложение в PhoneGap. Таким образом, он должен быть асинхронным по своей природе.

Ответы на вопрос(2)

Ваш ответ на вопрос