libro
www.tuyano.com
Google androidプログラミング入門

WebViewでインターネットアクセス! (3/6)

作成:2010-12-15 10:04
更新:2010-12-15 10:05

■WebViewClientを組み込む

実際にWebViewを利用してみると、いろいろと不具合?というか問題があることが分かってきます。まず、「リンクをクリックすると、Webブラウザが起動してページが表示されてしまう」という点。つまり、WebView内でページ移動するのでなく、別にWebアプリを開いてしまうのです。これでは、「アプリっていっても単にWebページを表示してただけ」というのがモロバレです。

それから、ネットアクセスでトラブったりすると、ブラウザのエラーがそのまま出てしまう点。これも、ちょっとなんとかしないと「Webにアクセスしてるだけ」っていうのがモロバレです。このあたりを何とかしないと、とても「自サイトのアプリ」としてリリースすることはできませんね。

これらの細かな制御を行うには、WebViewに「WebViewClient」という部品を組み込んでやります。これは、android.webkitパッケージに用意されているWebViewのクライアント動作を管理するためのクラスで、これをWebViewに設定するにより、WebViewで発生したさまざまなイベントを受取処理することができます。

下に、簡単なサンプルをあげておきます。今度は、リンクをクリックしてもWebブラウザは起動しません。そのままアプリ内で(つまりWebView内で)表示を移動するようになります。また、エラーが発生した場合も、WebViewにエラーメッセージを表示するだけで他の表示はされなくなります。

ここでは、WebViewの「setWebViewClient」というメソッドを使ってWebViewClientインスタンスを設定しています。そしてWebViewClientでは、「onReceivedError」というメソッドをオーバーライドしています。このメソッドは、
public void onReceivedError( エラーが起きたWebView, エラー番号,
        エラーメッセージ, エラーの起きたアドレス );
このような形になっています。これで、エラーの起きたWebViewに、loadDataを使って必要な表示を設定すれば、独自にエラー処理が行えるというわけです。

では、リンクをクリックするとWebブラウザで開いてしまう問題は? これは、実はsetWebViewClientWebViewClientを設定するだけで解決してしまいます。WebViewClientが用意されることで、リンクで新しいページの要求などがあっても、この組み込まれたWebViewClientで処理されるようになるため、Webブラウザは起動しなくなるのです。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

package jp.tuyano.sample;

import android.app.Activity;
import android.os.Bundle;
import android.webkit.*;
import android.widget.*;

public class MySample extends Activity {
	public WebView webview01;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        webview01 = (WebView)findViewById(R.id.WebView01);
        webview01.setWebViewClient(new WebViewClient(){

			@Override
			public void onReceivedError(WebView view, int errorCode,
					String description, String failingUrl) {
				view.loadData("ERROR: " + description,"text/plain","utf8");
			}
        	
        });
        webview01.loadUrl("http://www.google.com/");
    }

}

※関連コンテンツ

「Google androidプログラミング入門」に戻る