12

私はプロジェクトを作成し、Bluetoothプラグインから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

これは、ネイティブ (Java) 側から JS 側へのさらなる呼び出しのために、JS 側のコールバックが保持されることを意味します。これは、cordova.js コードで管理されている場所にあります。

たとえば、Network-Information プラグイン を見ると: https://github.com/apache/cordova-plugin-network-information/blob/master/src/android/NetworkManager.java#L221すべてのネットワーク状態で表示されます(WIFI、3G、4G、オフライン、...) プラグインは結果を JS に送信し、コールバックを維持して、すべての呼び出しが JS サイトの同じ成功コールバックで受信されます。

于 2015-02-17T23:38:36.783 に答える