ファビコンの取得

ファビコンの取得

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です