ファビコンの取得
ファビコンは、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から画像を取得することになる