显示 Android WebView 的网站图标

7
我想在android.webkit.WebView中显示我正在访问的网站的favicon。我尝试了两种方法来获取它:
1)WebViewClient.onPageStarted()方法有一个总是为null的favicon参数。
2)WebChromeClient.onReceivedIcon()方法从未被调用。
3)在onPageStarted()和onPageFinished()中调用WebView.getFavicon(),但它总是返回null。
我无法找到在线示例来显示如何访问favicon。非常感谢任何提示。

@NathanZ - 是的,Mark的答案似乎解决了问题。 - tronman
2个回答

19
为了使 WebView 的图标方法和监听器正常工作,需要手动打开 WebIconDatabase。通常情况下,您应该在 Activity 的 onCreate() 方法中执行此操作。
尝试将以下行添加到 onCreate() 方法中:
WebIconDatabase.getInstance().open(getDir("icons", MODE_PRIVATE).getPath());

完成这些步骤后,您应该开始收到任何此活动中的 WebView 的 onReceivedIcon() 回调,并且在图标可用时,getFavicon() 方法也应开始返回有效对象,而不是 null。


和@tronman一样遇到了同样的问题。我尝试了你的建议,在我的onCreate()中添加了这段代码,无论是在setContentView()之前还是之后都试过了。但我从未收到任何onReceivedIcon()回调,并且WebView.getFavIcon()始终为空。所以没有成功=( - MightyE
好的。请明确指出“在调用这些函数之前需要构建一个 WebView,而 WebView.getIconDatabase() 将返回一个 WebIconDatabase 对象”。 - Pascal
它说WebIconDatabase已被弃用。我认为你应该添加一个检查,只能在JELLY_BEAN_MR2及以下版本中使用它。请问为什么onReceivedIcon会使用这个位图调用,但是在其他任何地方尝试获取favIcon时,我都得到了null? - android developer

0

我记得 WebView 对象有一个可用的方法 getFavicon()。这是我的愚蠢问题,你试过了吗?


是的,我也尝试过那个。我已经将其添加到我的原始帖子中以进行澄清。 - tronman
你能给出你想要获取网站图标的URL吗?明天早上我会看一下。 - Sephy
无论是哪个网站...我都无法访问任何网站的favicon。非常感谢您的帮助。 - tronman
事实上,我已经进行了一些研究,甚至在源代码中也找不到如何检索此网站图标的方法。除非您从书签中获取它... - Sephy
好吧,我想我需要想出其他办法。谢谢! - tronman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接