我正在使用Android。试图显示“favicon”(又名“快捷图标”)或网页。
所以我已经有了从任何网站获取此图标的URL的代码,并将其下载到我的Android上。
现在我试图用它来制作一个Bitmap,但结果总是得到null。
代码:
String src = String.format("file:///data/data/com.intuitiveui.android/files/%s",prefName);
// prefName is "facebook.ico", and I do see tht file in my DDMS file browser. It's
// a valid icon file.
Bitmap res = BitmapFactory.decodeFile(src);
// This returns null
TIA
答案 0 :(得分:4)
以下是supported Android media formats的列表。 ICO不在其中。但是,您可能能够找到基于Java的ICO解码器。
答案 1 :(得分:2)
SKIA库为ICO文件提供解码器类。我能够在模拟器中显示ICO文件。还没有在实际的Android设备中尝试过它。
Bitmap bmap = BitmapFactory.decodeFile("/sdcard/vlc.ico");
答案 2 :(得分:1)
WebView
component has a getFavicon()
method所以在Android中解码ICO文件肯定是可能的。您可以have a look at the Android source查看如何解析ICO文件。我看了一眼,但找不到相关的部分。
或者,您应该使用SDK为您获取favicon。但是,我已经快速尝试了,无法让它发挥作用。
这是值得的,这是我的测试代码,再次注意这不起作用:
String url = "http://stackoverflow.com";
WebView wv = new WebView(this);
wv.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
Log.i("HelloAndroid","Loaded " + url);
Log.i("HelloAndroid","Icon " + (view.getFavicon() == null ? "not" : "") + " found");
}
});
WebIconDatabase wid = WebIconDatabase.getInstance();
wid.requestIconForPageUrl(url, new WebIconDatabase.IconListener() {
public void onReceivedIcon(String url, Bitmap icon) {
Log.i("HelloAndroid","Found Icon for " + url);
}
});
wv.loadUrl("http://stackoverflow.com");
Log.i("HelloAndroid","Loading " + url);
问题可能在于我没有将WebView
添加到可见的View
。如果你确实这样做了,我会有兴趣听听你做了什么。
很遗憾给出两个半完整的答案,但我认为值得张贴我找到的答案。
答案 3 :(得分:1)
我有类似的问题。 BitmapFactory.decode在模拟器上解码* .ico但在我的Galaxy S上没有。解决方案对我来说是:
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int read=0;
while((read = inputStream.read()) != -1){
bos.write(read);
}
byte[] ba = bos.toByteArray();
Bitmap icon = BitmapFactory.decodeByteArray(ba, 0, ba.length);//new FlushedInputStream(inputStream));
答案 4 :(得分:0)
现在没有接受的答案,我会在这里分享我的发现。
Windows .ico文件格式有点复杂,它可能包含多个大小和颜色深度的一个或多个小图像,这样它们可以适当缩放。请参阅ICO_(file_format)
所以当使用unix" file"命令检查图标文件类型,您可能会得到以下结果:
注意 a.ico 和 b.ico 包含不同数量的图标。
我尝试使用 BitmapFactory.decodeFile 来解码这些图标。
由于我只有有限的Android设备,我无法给出任何结论。也许其他任何人都可以提供帮助。
因此,如果你真的想要解码.ico文件,你可以尝试:
答案 5 :(得分:0)
由于 Picasso 似乎没有解析.ico文件,因此我也对此感到困惑。 但是令人惊讶的是,该解决方案非常简单。
<appender name="plainLogsToFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/${LOG_PATH:-/tmp/default}/service.log</file>
</appender>
对我来说,该解决方案可用于大多数网站,但是只要图标文件的大小过小,它都会生成一个空位图。