時々、HTML(JavaScript)とAndoroidを連携したいときがあります。そんなときは、WebViewを使えば、簡単に連携することができます。連携方法は以下の通り。
1.JavaScript→Android
AndroidのWebViewには、addJavascriptInterfaceというメソッドがあり、ここに登録することで、Javaのメソッドを呼び出すことができます。うーん簡単。
しかし引数に渡せるのは、比較的プリミティブなものだけ。というルールがある(配列とか結構ダメ)。
とはいえ、引数も戻り値も指定できる。
2.Android→JavaScript
WebView#loadUrlメソッドを使って、JavaScriptを呼び出す。
webView.loadUrl("javascript:testFunction('abc');");
コレで、testFunctionというスクリプトを引数'abc'で呼び出したことになる。
しかし、戻り値をもらうインタフェースがない...。
3.JavaScriptからどうやって戻り値をもらう?
手っ取り早いのはコールバック形式。
事前準備として、WebView#addJavascriptInterfaceで、コールバック(値を保持する変数のセッターとか)を登録
webView.loadUrlでJavaScriptを呼び出すこの時、addJavascriptInterfaceで登録したメソッドを呼び出す
メソッド呼び出しが終わったら、addJavascriptInterfaceで登録したインタフェースから値を取り出す
登録したクラスより値を取り出すことで、結果が取得できる。
・・・結果の受け取りだけですが...エレガントじゃないですが、いたし方がない...。
2 件のコメント:
はじめまして。
3がうまく動かない(ハングする)ん
ですが何かほかにしなければいけないことが
あるんでしょうか?
やっていることは
addJavascriptInterfaceでjavaクラスを
登録。javascriptでの名前はクラス名と同じに。
loadUrl("javascript:クラス.メソッド");
で呼び出し。
です。よろしくお願い致します。
匿名さんへ
連絡遅くなりました。
雰囲気からですが、
>loadUrl("javascript:クラス.メソッド");
じゃなくて、
>loadUrl("javascript:testFunction");
です。で、JavaScriptのtestFunctionないぶで、クラス.メソッドを呼び出します。
コードを見せてくれれば何かアドバイスできるかもしれません。
公開可能でしょうか?
コメントを投稿