Osiągnąłem to przez mały hack. Najpierw utworzyłem fałszywy plik ikony 1x1 i zapisałem go w folderze zasobów. Potem overrode WebViewClient's shouldInterceptRequest() metodę, gdzie mogę sprawdzić URL czy jest to prośba o pliku favicon iw tym WebResourceResponse przypadek powrotnej z InputStream, który zawiera nasz fałszywy ikony:
@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;
}
Należy pamiętać, że InputStream nie musi być zamknięta w naszym kod, ponieważ jest on następnie używany przez WebView do odczytywania ikony. WebviewClient musi być ustawiony na WebView poprzez jego seter:
mWebView.setWebViewClient(subclassedWebViewClient);
ten nie działa, metoda jest synchroniczna i zwraca tylko aktualnie buforowane Bitmap Favicon za. –