12

我做了一个项目,在那里我建立了从我的蓝牙插件到我的 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上定位了开发

4

1 回答 1

6

这意味着保留 JS 端的回调以供从本机(Java)端到 JS 端的进一步调用。它在 cordova.js 代码中管理的某个地方。

例如,如果您查看 Network-Information 插件: https ://github.com/apache/cordova-plugin-network-information/blob/master/src/android/NetworkManager.java#L221 ,您会在每个网络状态中看到它(WIFI,3G,4G,offline,...) 插件将结果发送到 JS 并保持回调在 JS 站点中的相同成功回调中收到。

于 2015-02-17T23:38:36.783 回答