時々、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で登録したインタフェースから値を取り出す
登録したクラスより値を取り出すことで、結果が取得できる。
・・・結果の受け取りだけですが...エレガントじゃないですが、いたし方がない...。
GDDとは「Gut's Driven Development」の略です。簡単にいうとガッツ駆動方式のシステム開発です。
えぇまぁ、私の開発スタイルです。このBlogでは、そんなシステム開発の作業で発見したことを記録していきます。
(Google Developer Daysとはなんの関係ありません。)
2011年8月17日水曜日
2011年8月13日土曜日
[Android]WebViewでWebViewClientを指定する
WebViewはWebViewClientをセットしないとブラウザを起動するんです。
いままで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っぽい。
デバイスマネージャ→プロパティ→詳細タブを表示し、プルダウンから「ハードウエア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はいい感じで動いていたんですが、デバック開始時にこんなメッセージが!
そして「Android SDK及びADVマネージャを開く」ボタンを押しても空っぽの画面が。。。
eclipseやマシンを再起動しても、状況は変わらず。
そうだ。アレだ!とEclipseを-cleanオプション付きで起動したら直りました。
いつもコレを忘れちゃうんですよね。
いつもはeclipseの環境をコピーしてからアップデートしていたんですが、今日は時間がなくて、とりあえずアップデートしてみました。IDEはいい感じで動いていたんですが、デバック開始時にこんなメッセージが!
Automatic Target Mode: Unable to detect device compatibility. Please select a target device.
そして「Android SDK及びADVマネージャを開く」ボタンを押しても空っぽの画面が。。。
eclipseやマシンを再起動しても、状況は変わらず。
そうだ。アレだ!とEclipseを-cleanオプション付きで起動したら直りました。
いつもコレを忘れちゃうんですよね。
登録:
投稿 (Atom)