Отображение значка Android WebView

Я хотел бы отобразить значок веб-сайта, к которому я обращаюсь через android.webkit.WebView. Я пробовал два способа получить его:

1) Метод WebViewClient.onPageStarted() имеет параметр favicon, который всегда равен нулю.

2) метод WebChromeClient.onReceivedIcon() никогда не вызывается.

3) Вызывается WebView.getFavicon() в onPageStarted() и onPageFinished(), но всегда возвращает ноль.

Мне не удалось найти в Интернете пример, показывающий, как получить доступ к фавиконам. Любые подсказки будут очень признательны.


person tronman    schedule 11.08.2010    source источник
comment
Вы нашли решение?   -  person znat    schedule 09.05.2012
comment
@NathanZ - да, ответ Марка, похоже, помог.   -  person tronman    schedule 11.06.2013


Ответы (2)


Чтобы методы и прослушиватели значков WebView работали, вам необходимо сначала открыть базу данных WebIconDatabase вручную. Обычно вы делаете это в методе onCreate() вашей Activity.

Попробуйте добавить следующую строку в onCreate():

WebIconDatabase.getInstance().open(getDir("icons", MODE_PRIVATE).getPath());

После того, как вы это сделаете, вы должны начать получать onReceivedIcon() обратные вызовы для любого WebView в этом действии, и метод getFavicon() также должен начать возвращать действительный объект, а не нуль, всякий раз, когда доступны значки.

person Mark Slee    schedule 17.03.2011
comment
У меня та же проблема, что и у @tronman. Я попробовал ваше предложение, добавив этот код в мой onCreate() как до, так и после setContentView(). Я никогда не получаю никаких обратных вызовов onReceivedIcon(), а WebView.getFavIcon() всегда имеет значение null. Так что без кубиков =( - person MightyE; 05.10.2011
comment
Ницца. Просто укажите, что «Эти функции требуют, чтобы WebView был создан перед вызовом, и WebView.getIconDatabase() вернет объект WebIconDatabase». - person Pascal; 02.12.2012
comment
В нем говорится, что WebIconDatabase устарел. Я думаю, вам стоит добавить проверку, что его следует использовать только на JELLY_BEAN_MR2 и ниже. Не могли бы вы ответить, почему onReceivedIcon вызывается с этим растровым изображением, но везде, где я пытаюсь получить favIcon, я получаю null ? - person android developer; 26.05.2019

Я думаю, что нужно помнить, что для объекта WebView доступен метод getFavicon(). вот мой глупый вопрос ты пробовал?

person Sephy    schedule 11.08.2010
comment
Да, я тоже пробовал. Я добавил это в свой исходный пост, чтобы уточнить. - person tronman; 12.08.2010
comment
Можете ли вы дать адрес сайта, с которого вы хотите получить значок? Я посмотрю на это завтра утром. - person Sephy; 13.08.2010
comment
Неважно, какой сайт... Я не могу получить доступ к фавиконам любого веб-сайта. Я ценю вашу помощь. - person tronman; 14.08.2010
comment
Действительно, я провел некоторое исследование, даже в исходном коде, не нашел способа получить этот значок. За исключением случаев, когда вы получаете его из закладки... - person Sephy; 14.08.2010
comment
Ну, думаю, мне нужно придумать что-то еще. Спасибо! - person tronman; 16.08.2010