PhoneGap setKeepCallback - 它是什么?

时间:2013-02-07 10:07:57

标签: cordova phonegap-plugins

我做了一个项目,在那里我建立了一个从我的蓝牙插件到我的javascript的成功通信。从我的Javascript我在java中注册回调到我的插件:

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

        }

这当然是在exec函数中完成的。因为事实上,蓝牙事件不是在某些时间点发生的,我注册了一个广播接收器,它发送消息到我的javascript,例如当找到设备时。

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

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

}

发送所属的功能:

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

我在那个上下文中真正理解的是,setKeepCallback在那些不同的函数中做了什么。我以为会有文档,但是没有。

有人能告诉我吗? 我在https://github.com/phonegap/phonegap-plugins/tree/master/Android/PhoneListener

上定位了开发

1 个答案:

答案 0 :(得分:4)

这意味着JS端的回调会保留用于从本机(Java)端到JS端的进一步调用。 它是在cordova.js代码中管理的。

如果您查看网络信息插件的示例: https://github.com/apache/cordova-plugin-network-information/blob/master/src/android/NetworkManager.java#L221你看到在每个网络状态(WIFI,3G,4G,离线......)上,插件会将结果发送给JS并保持回调,每次调用都会在JS站点的同一成功回调中收到。