クラウドなアプリケーション構築 前編-WebView

By 鈴木 唯比古
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

はじめまして。鈴木です。
今回から2回に分けて「クラウドなアプリケーションの構築」と題して
Androidの特性を生かしたサーバーサイドアプリケーションの構築を
実践していこうと思います。

これまでのモバイルアプリケーション開発とは一線を画して
なんでもできちゃうAndroidですが、Googleケータイというからには、
やっぱりクラウドなアプリケーションを開発したいですよね。
実際、これまでWEBブラウザに頼らざるを得なかったクラウドの世界も、
Androidケータイというフロントエンドを得ることで
より強力なサーバサイドアプリケーションを提供することができます。

今回はその礎として、「WebView」を使ってサーバーサイドから
アプリ上の画面制御をしてみたいと思います。

HTMLファイルの表示

WebViewは、HTMLファイルを表示するコンポーネントです。
このコンポーネントを使うことで、HTMLフォーマットで記述されたファイルを使って画面を構成することができます。

ひとまず、以下の内容のHTMLファイルをアプリケーション内に配置して表示してみます。

 
<local00.html>

 

HTMLとAndoroid APIの連携をさせたいので、
Andoroidアプリから呼び出されるjavascriptとして「onLoad()」メソッドを定義し、
逆に、HTMLからAndroidアプリ上のメソッドを呼び出すためにボタンのonClickイベントに
「window.link2local01.onClick()」というメソッド呼び出しを記述しています。

HTMLファイルをアプリケーション内に配置する場合は
アプリケーションルート配下のassetsディレクトリに格納します。

HTMLファイル配置イメージ

では、Activityクラスを継承したMainクラスを作成して、
このHTMLファイルをアプリケーションから呼び出してみましょう。
onCreateメソッド内でWebViewインスタンスを生成して
HTMLファイルを読み込んでみます。

実行してみます。
プレビュー1

HTMLファイルの内容が表示されました。

Android APIとの連携

HTMLファイルの表示はできましたが、これではただのHTMLビューアーです。
HTMLとAndroid APIを連携させましょう。
WebViewClientクラスとWebChromeClientクラスを拡張して、
ブラウザイベント発生時の挙動を制御します。

画面遷移先用にHTMLをもう1つ追加しておきます。

 

<local01.html>

では、実行してみます。

プレビュー2

画面遷移できたでしょうか。
このように、WebViewではHTML上のjavascriptからAndroid APIを呼び出したり、
Android APIからHTML上のjavascriptを呼び出したりすることができます。 

インターネット上のHTMLファイルの表示

クラウドというからには、当然、
サーバーサイドでアプリケーションの制御をする必要があります。

WebViewではローカル(assets)のファイルだけではなく、
インターネット上のファイルも読み込むことができます。

Mainクラスに以下の一文を足して、インターネット上にあるHTMLファイルを
読み込んでみます。
(※ドメインは環境に合わせて書き換えてください。)

また、WEBサーバ上に以下のHTMLファイルを置いておきます。

 

<server00.html>

 local01.htmlもserver00.htmlに遷移するように書き換えます。

 

<local01.html>

因みに、エミュレータ環境で実行する場合でローカルにWEBサーバを立てる場合、
ドメインにlocalhostを指定してはいけません。
(エミュレータ自身のアドレスと混同してしまうため)
マシン名を指定するか、ローカルマシンのIPアドレスを調べて指定しましょう。

実行してみます。

プレビュー3

遷移できましたか?
このように、インターネット上のHTMLファイルでも、ローカルに置いた場合と同様に
Android APIと連携することができます。

アプリサイドでは画面から呼び出す関数ライブラリの提供と共通的な処理に専念して、
画面はサーバーサイドで制御することで、WEBブラウザではできなかった
リッチで強力なクラウドアプリケーションが実装できます。

次回はより実践的なアプリを作成する予定です。

関連する投稿