ファビコンの取得
ファビコンは、WebページやWebサイトのシンボルマークとして設置できるアイコンのこと
Webサイトを閲覧していると
ブラウザのURL欄の左側にでているのがわかる
ファビコンを取得するには
WebIconDatabaseクラスに
ファビコンの保存先を指定して
WebChromeClientクラスの
onReceivedIconハンドラ経由で取得する
onCreate()の中へ処理を追加
setupWebIconDatabase(); mWebView = (WebView)findViewById(R.id.web); mFaviconView = (ImageView)findViewById(R.id.imgFavicon); mTitleView = (TextView)findViewById(R.id.title); mWebView.getSettings().setJavascriptEnabled(true); mWebView.setWebViewClient(newWebViewClient()); mWebView.setWebChromeClient(new WebChromeClient(){ @Override public void onReceivedTitle(WebView view, String title){ mTitleView.setText(string); } @Override public void onReceivedIcon(WebView view, Bitmap icon){ Log.d(TAG, "onReceivedIcon"); mFaviconView.setImageBitmap(icon); } @Override public void onReceivedTouchIconUrl(WebView view, String url, boolean precomposed){ Log.d(TAG,"onReceivedTouchIconUrl, url = "+ url); } }); mWebView.loadUrl("アイコンのURL");
次に、ファビコンアイコンの保存先を
setWebIconDatabase()で指定
@SupportWarnings("deprecation") private void setWebIconDatabase(){ if(Build.VERSION_SDK_INT <= Build.VERSION_CODES.JELLY_BEANS_MR2){ //アイコンを保存するディレクトリを取得 File databaseDir = getDir("icon", Context.MODE_PRIVATE); if(!databaseDir.exists()){ //ディレクトリがないなら作成 databaseDir.mkdirs(); } //正常につくれたら、WebIconDatabase保存先として指定 android.webkit.WebIconDatabase.getInstance().open(databaseDir.getAbsolutePath()); Log.d(TAG,"IcondatabaseDir = "+ databaseDir); } }
Android 4.4からは
WebIconDatabaseクラスは非推奨になったけど
それ以下のバージョンだと、使わないと
onReceivedIconUrlハンドラが呼ばれなくなる
onReceivedTouchIconUrl()は
ファビコンではなく
apple-touch-iconを取得するためのハンドラ
apple-touch-iconは
Appleの独自仕様で、大きなファビコンみたいなもの
Webサイトがこれに対応してると
このイベントハンドラが動作するので
そのURLから画像を取得することになる