次のインタフェース及び実装を提供します。
class | description |
---|---|
DataBus |
Androidアプリ(Java)で利用できるDataBus基本クラス |
WebViewDataBus |
ネイティブコード(Java) と WebView(JavaScript) 間で利用できるDataBus |
MemoryQueue |
同一プロセス内での通信機構 |
MemoryQueueDataBus |
MemoryQueue を用いたDataBus |
MultiplexDataBus |
DataBusを多重化 |
本リポジトリの app モジュールが, WebViewDataBusで通信をする簡単なサンプルになっています。
- Java: MainActivity.java
- HTML: index.html, script.js
dependencies {
compile 'jp.co.dwango.cbb:data-bus:2.1.3'
}
WebViewDataBusの基礎的な使用方法を示します。
WebView
で Webコンテンツのloadを行う前 にWebViewDataBus
インスタンスを作成する必要がありますWebViewDataBus
は, Webコンテンツ側でDataBusを使用するためのJavaScriptコードをインジェクトします
WebView webView = (WebView) findViewById(R.id.web_view);
webView.getSettings().setJavaScriptEnabled(true);
WebViewDataBus dataBus = new WebViewDataBus(this, webView);
webView.loadUrl(url);
注意点: 1つの
WebView
に対して作ることができるWebViewDataBus
のインスタンスは1つだけです。 複数のDataBusを利用したい場合は,MultiplexDataBus
を用いて多重化してください。
dataBus.addHandler(new DataBusHandler() {
@Override
public void onReceive(JSONArray data) {
Log.d("MyApp", "received data from JavaScript: " + data);
}
}
追加したハンドラは
DataBus#removeHandler
またはDataBus#removeAllHandlers
で削除できます。
DataBus#send
で JSONArray
形式のデータを JavaScript側へ送信できます。
dataBus.send(new JSONArray().put("data"));
次のコードでJavaScript側でDataBusのインスタンスを生成できます。
var dataBus = new CBB.WebViewDataBus();
DataBus#addHandler
で function を追加することで, Java側がsendしたデータをハンドリングできます。
dataBus.addHandler(function() {
var data = arguments.join(',');
console.log("received data from native: " + data);
});
DataBus#send
でデータをJava側へ送信できます。
dataBus.send(1, "arg2", {"arg3": 3});
DataBus#destroy
で破棄することができます。
dataBus.destroy();
DataBus#destroy
で破棄することができます。
dataBus.destroy();
- Source code, Documents: MIT
- Image files: CC BY 2.1 JP