2011年8月17日水曜日

[Android]JavaScript⇔Android(Java)の連携

時々、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で登録したインタフェースから値を取り出す
 登録したクラスより値を取り出すことで、結果が取得できる。

 ・・・結果の受け取りだけですが...エレガントじゃないですが、いたし方がない...。

2011年8月13日土曜日

[Android]WebViewでWebViewClientを指定する

WebViewはWebViewClientをセットしないとブラウザを起動するんです。
いままでWebViewClientを指定しなかったことがなかったので、知りませんでした...。

2011年8月11日木曜日

[Android]USBドライバ(その3)

GDD Blog: [Android]USBドライバ(その2)で、簡単に接続させる方法を調べましたが、結局見つかりませんでした。その代わり、デバイスIDを調べる方法がありました!

デバイスマネージャ→プロパティ→詳細タブを表示し、プルダウンから「ハードウエアID」を選択し、android_winusb.infにそのIDを書くだけ。コレならいちいち調べなくてもいいので楽チン。

NexusOneの場合、
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E12&MI_01

となっており、この右辺にハードウエアIDで出てくる長いほうを書けばOKっぽい。

2011年8月8日月曜日

[Android]デバッグが開始できない(デバイスを認識しない)

AndroidSDKとADTって、結構頻繁にアップデートがあります。
いつもはeclipseの環境をコピーしてからアップデートしていたんですが、今日は時間がなくて、とりあえずアップデートしてみました。IDEはいい感じで動いていたんですが、デバック開始時にこんなメッセージが!

Automatic Target Mode: Unable to detect device compatibility. Please select a target device.

そして「Android SDK及びADVマネージャを開く」ボタンを押しても空っぽの画面が。。。
eclipseやマシンを再起動しても、状況は変わらず。

そうだ。アレだ!とEclipseを-cleanオプション付きで起動したら直りました。
いつもコレを忘れちゃうんですよね。