Cordovaのネイティブプラグインでイベントを発火する処理を実装したい場合の説明です。
ただし、ちょっとだけ、考え方を変える必要があります。

まず、イベントに特化したようなAPIやら機能はありません。
組み合わせで、実装していきます。

大まかな考え方

  1. 通常通り、プラグインメソッドを実行します
  2. プラグイン側では、処理を返すものの、まだ続きがあるよとします
  3. 受信したメッセージをJavaScript型でイベントとして発火する

この流れです。
参考にするとよいコードに、ネットワーク状態を知るプラグインがあり、Online/Offline状態が、イベントとして通知されます。

1.通常通り、プラグインメソッドを実行します

まずは、JS側を見て見ます。

NetworkConnection.prototype.getInfo = function(successCallback, errorCallback) {
    exec(successCallback, errorCallback, "NetworkStatus", "getConnectionInfo", []);
};

となっているように、getInfoというのがJS側のメソッド。getConnectionInfoがネイティブ側のメソッドです。
なので、別にイベントだからといって、ここでは、特別な処理があるわけではありません。

では、このプラグインの場合には、どこでそのメソッド(getInfo)を投げているかと言えば、Cordovaの準備が整った状態になったらすぐに、そのメソッドを実行しているわけです。

channel.onCordovaReady.subscribe(function() {
    me.getInfo(function(info) {
        :
    }
});

2.プラグイン側では、処理を返すものの、まだ続きがあるよとします

普通に考えると、これでは1回の命令に、1回の結果となりそうですが、Cordovaの場合には違うので、これを関数と呼んでいいのかと思うものの、
setKeepCallback(true)にすれば、1つの関数実行につき、複数の結果が返せるのです。
Androidの場合には、こんな感じ。

PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, connectionType);
pluginResult.setKeepCallback(true);
callbackContext.sendPluginResult(pluginResult);

自分で、イベントを作る場合には、Threadなどで処理をすることになるのでしょう。

3.受信したメッセージをJavaScript型でイベントとして発火する

これは、まあ、いいですよね。といいたいところですが、

channel.onCordovaReady.subscribe(function() {
    me.getInfo(function(info) {
        if (info === "none") {
            // set a timer if still offline at the end of timer send the offline event
            timerId = setTimeout(function(){
                cordova.fireDocumentEvent("offline");
                timerId = null;
            }, timeout);
        }, 
        // :
    }
});

のように、JS側でgetInfoのCallback内に記述すれば、あとはネイティブ側で結果を返す度に、Callbackが呼ばれるので、結果イベント処理になるわけです。
jQueryを使うや、それ以外のライブラリを使ってもいいですし、fireDocumentEventを使えば、JSのdocumentオブジェクトのイベントとして発火できるようです。

お仕事のご依頼・相談を承ります
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら

Leave a Reply

お仕事のご依頼・相談
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら
ソフトウェア&ライブラリ




ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
執筆書籍
本、雑誌等

WEB記事:CodeZine
執筆記事はこちら
カレンダー
2015年10月
« 9月   11月 »
 1234
567891011
12131415161718
19202122232425
262728293031  

カスタム検索
RSS
Add to Google < !–adsense–>
アーカイブ
カテゴリ
にほんブログ村 IT技術ブログへ