Javascript和Phonegap插件之间的异步通信
所以,每个人都知道我们做了一个类扩展和覆盖,然后在JS和原生Java(用于Android)之间创建了一个桥梁。此外,我们用于将结果返回给 JS。CordovaPlugin
execute()
PluginResult
因此,当有一个请求从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"));
}
}
}
}
弹出,但不会发送到JS。Toast
PluginResult
附言 :监听WiFi事件不是我的实际问题,我想在Phonegap中复制该应用程序。因此,它本质上必须是异步的。Android Bluetooth Chat