Skip to content

cross-border-bridge/data-bus-android

Repository files navigation

次のインタフェース及び実装を提供します。

class description
DataBus Androidアプリ(Java)で利用できるDataBus基本クラス
WebViewDataBus ネイティブコード(Java) と WebView(JavaScript) 間で利用できるDataBus
MemoryQueue 同一プロセス内での通信機構
MemoryQueueDataBus MemoryQueue を用いたDataBus
MultiplexDataBus DataBusを多重化

Example

本リポジトリの app モジュールが, WebViewDataBusで通信をする簡単なサンプルになっています。

Setup

gradle

dependencies {
	compile 'jp.co.dwango.cbb:data-bus:2.1.3'
}

Usage

WebViewDataBusの基礎的な使用方法を示します。

step 1: WebView + DataBus を準備 (Java)

  • WebViewWebコンテンツの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 を用いて多重化してください。

step 2: JavaScript側からsendされたデータをハンドリング (Java)

	dataBus.addHandler(new DataBusHandler() {
		@Override
		public void onReceive(JSONArray data) {
			Log.d("MyApp", "received data from JavaScript: " + data);
		}
	}

追加したハンドラは DataBus#removeHandler または DataBus#removeAllHandlers で削除できます。

step 3: JavaScript側へデータをsend (Java)

DataBus#sendJSONArray 形式のデータを JavaScript側へ送信できます。

	dataBus.send(new JSONArray().put("data"));

step 4: DataBusを準備 (JavaScript)

次のコードでJavaScript側でDataBusのインスタンスを生成できます。

var dataBus = new CBB.WebViewDataBus();

step 5: Java側からsendされたデータをハンドリング (JavaScript)

DataBus#addHandler で function を追加することで, Java側がsendしたデータをハンドリングできます。

    dataBus.addHandler(function() {
        var data = arguments.join(',');
        console.log("received data from native: " + data);
    });

step 6: Java側へデータをsend (JavaScript)

DataBus#send でデータをJava側へ送信できます。

    dataBus.send(1, "arg2", {"arg3": 3});

step 7: 破棄

(JavaScript)

DataBus#destroy で破棄することができます。

    dataBus.destroy();
(Java)

DataBus#destroy で破棄することができます。

    dataBus.destroy();

License