Android:以编程方式通过URL检索网页缩略图

时间:2011-01-26 13:58:35

标签: android

我想通过网络编程检索网页缩略图。

做了一些搜索并提出了几个解决方案:

  1. 使用Swing(JEditorPane) - 但据我所知&纠正我,如果我错了,就不可能在Android应用程序中使用swing。
  2. 使用带有api服务的第三方网站,例如thumbalizr.com - 除非我付费(我的应用程序是免费的),否则不要使用它,因为它会为缩略图添加水印。
  3. 不知道是否可能,但可能使用Android浏览器功能?也许以隐藏的方式转到URL,而活动只显示进度条? :)
  4. 任何人都可以提供有用的东西吗?也许更原生的东西?

    欣赏任何方向!

2 个答案:

答案 0 :(得分:0)

好问题......它可能不够好,但您可以通过android.webkit.WebHistoryItem的getFavicon()调用从网络历史记录中获取网站的图标: http://developer.android.com/reference/android/webkit/WebHistoryItem.html AMB

答案 1 :(得分:0)

您可以尝试使用HttpClient加载favicon。 F.e:

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 format is not supported officially by Android。实际上,BitmapFactory在大多数设备上解码ico格式而没有任何问题。无论如何,我不确定,它会在绝对所有设备上解码ico。