WebViewでインターネットアクセス! (3/6)
作成:2010-12-15 10:04
更新:2010-12-15 10:05
更新: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」というメソッドをオーバーライドしています。このメソッドは、
では、リンクをクリックするとWebブラウザで開いてしまう問題は? これは、実はsetWebViewClientでWebViewClientを設定するだけで解決してしまいます。WebViewClientが用意されることで、リンクで新しいページの要求などがあっても、この組み込まれたWebViewClientで処理されるようになるため、Webブラウザは起動しなくなるのです。
それから、ネットアクセスでトラブったりすると、ブラウザのエラーがそのまま出てしまう点。これも、ちょっとなんとかしないと「Webにアクセスしてるだけ」っていうのがモロバレです。このあたりを何とかしないと、とても「自サイトのアプリ」としてリリースすることはできませんね。
これらの細かな制御を行うには、WebViewに「WebViewClient」という部品を組み込んでやります。これは、android.webkitパッケージに用意されているWebViewのクライアント動作を管理するためのクラスで、これをWebViewに設定するにより、WebViewで発生したさまざまなイベントを受取処理することができます。
下に、簡単なサンプルをあげておきます。今度は、リンクをクリックしてもWebブラウザは起動しません。そのままアプリ内で(つまりWebView内で)表示を移動するようになります。また、エラーが発生した場合も、WebViewにエラーメッセージを表示するだけで他の表示はされなくなります。
ここでは、WebViewの「setWebViewClient」というメソッドを使ってWebViewClientインスタンスを設定しています。そしてWebViewClientでは、「onReceivedError」というメソッドをオーバーライドしています。このメソッドは、
public void onReceivedError( エラーが起きたWebView, エラー番号,このような形になっています。これで、エラーの起きたWebViewに、loadDataを使って必要な表示を設定すれば、独自にエラー処理が行えるというわけです。
エラーメッセージ, エラーの起きたアドレス );
では、リンクをクリックするとWebブラウザで開いてしまう問題は? これは、実はsetWebViewClientでWebViewClientを設定するだけで解決してしまいます。WebViewClientが用意されることで、リンクで新しいページの要求などがあっても、この組み込まれたWebViewClientで処理されるようになるため、Webブラウザは起動しなくなるのです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
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/"); } }
※関連コンテンツ