Ho raggiunto questo risultato con un piccolo trucco. Innanzitutto, ho creato un file icona 1x1 falso e l'ho salvato nella cartella delle risorse. Poi ho calpestato WebViewClient's shouldInterceptRequest() metodo, dove posso controllare l'URL se è la richiesta di file di favicon e in quel WebResourceResponse caso di ritorno con l'InputStream che contiene la nostra icona falso:
@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;
}
Si noti che l'InputStream non deve essere chiuso nella nostra codice, perché successivamente viene utilizzato da WebView per leggere l'icona. Il WebviewClient deve essere impostato il WebView attraverso il suo setter:
mWebView.setWebViewClient(subclassedWebViewClient);
fonte
2016-05-24 12:15:06
Questo non funziona, il metodo è sincrona e restituisce solo attualmente nella cache bitmap di favicon. –