少しハックでこれを実現しました。まず、偽の1x1アイコンファイルを作成し、assetsフォルダに保存しました。そして、私はそれがファビコンファイルの要求であるかどうか、私はURLをチェックWebViewClient's shouldInterceptRequest()方法を、オーバーライドし、私たちの偽のアイコンを含むInputStreamとその場合のリターンWebResourceResponse中:のInputStreamは、私たちに閉鎖されてはならないこと
@Override
@CallSuper
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
if(!request.isForMainFrame() && request.getUrl().getPath().equals("/favicon.ico")) {
try {
return new WebResourceResponse("image/png", null, new BufferedInputStream(view.getContext().getAssets().open("empty_favicon.ico")));
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
は注意これはWebViewがアイコンを読み取るために使用されるためです。 WebviewClientはそのセッターを経由してのWebViewに設定する必要があります:完全なソリューションだった
mWebView.setWebViewClient(subclassedWebViewClient);
これは動作しません、この方法は同期であり、唯一の現在キャッシュされファビコンのビットマップを返します。 –