Android:通过编程方式获取网页缩略图的URL

3
我想以编程方式获取网页缩略图的URL。
我进行了一些搜索,并找到了几种解决方案:
1.使用Swing(JEditorPane)-但据我所知,如果我没错,无法在Android应用程序中使用Swing。
2.使用第三方带有API服务的网站,如thumbalizr.com-不想使用它,因为它会给缩略图加上水印,除非我付费(我的应用程序是免费的)。
3.不知道是否可能,但也许可以使用Android浏览器功能来实现?也许在活动仅显示进度条的情况下以隐藏方式前往URL? :)
有人能提供有效的方法吗?或者有更本地的东西吗?
感谢任何指导!
2个回答

1

您可以尝试使用HttpClient加载网站图标。例如:

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
..........

ArrayList<String> list; //list of target urls

HttpClient httpclient = new DefaultHttpClient();
final int size = list.size();
for (int i = 0; i < size; ++i) {
    try {
       String pure_url = extractPureUrl(url);
       HttpResponse response = httpclient.execute(new HttpGet(pure_url + "/favicon.ico"));

       if (response.getEntity() != null) { 
           StatusLine statusLine = response.getStatusLine();
           if (statusLine.getStatusCode() == HttpStatus.SC_OK) {
              ByteArrayOutputStream out = new ByteArrayOutputStream();
              response.getEntity().writeTo(out);
              out.close();

              byte[] image_bytes = out.toByteArray();
              bmp = BitmapFactory.decodeStream(new ByteArrayInputStream(image_bytes));
              if (bmp != null) {
                  //do smth with received bitmap
              }         
           } else {
              response.getEntity().consumeContent();
           }
       }
  } catch (ClientProtocolException e) {
    //log error
  } catch (IOException e) {
    //log error
  }
}

private static final String EXTENDED_HTTP_PREFIX = "http://www.";
private static final String HTTP_PREFIX = "http://";
/** Converts http://abc.com/xxx and http://www.abc.com/xxx to http://abc.com */
private static String extractPureUrl(String srcUrl) {
    String sw = srcUrl.toLowerCase();
    String s = sw.startsWith(EXTENDED_HTTP_PREFIX) 
   ? sw.substring(EXTENDED_HTTP_PREFIX.length()) 
   : sw.startsWith(BookmarkInfo.HTTP_PREFIX) 
      ? sw.substring(BookmarkInfo.HTTP_PREFIX.length()) 
      : sw;
    int n = s.indexOf('/');
    if (n == -1) return srcUrl;
    return HTTP_PREFIX + s.substring(0, n);
}

这里存在一个潜在的问题 - ico格式在Android上没有官方支持。实际上,大多数设备上的BitmapFactory可以无障碍地解码ico格式。但是,我不确定它是否能够在所有设备上都解码ico格式。


这是一个很好的答案,但图标的尺寸非常小。 - Bhaven Shah

0

谢谢,但那不是我想要的。我想在用户使用浏览器访问此URL之前检索书签缩略图,这意味着我需要模拟对此页面的请求并以某种方式检索生成的缩略图。(示例可在LauncherPro付费版的书签小部件设置中找到)。 - Lior Iluz
就像我说的那样,那可能还不够好...但是有一个android.webkit.WebView.capturePicture方法[http://developer.android.com/reference/android/webkit/WebView.html#capturePicture()]。 - amb
不行...这只能用于捕获您的Web视图上当前查看的网站的屏幕截图。 - Lior Iluz
好的,使用capturePicture方法可能是可行的。我得把它隐藏在后台,但这有可能会起作用。感谢您提醒我。 - Lior Iluz

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