2011-01-26 16 views
3

私はプログラムでURLでWebページのサムネイルを取得したいと考えています。 Android:プログラムでURLでWebページのサムネイルを取得する

は、いくつかの検索を完了し、いくつかの解決策を思い付いた:

  1. スイング(JEditorPaneの)を使用して - しかし、私は理解して&は私が間違っている場合、それは、Androidアプリでスイングを使用することはできません私を修正します。
  2. thumbalizr.comのようなapiサービスを使用する第三者サイトを使用しています。私が支払いをしない限りサムネイルを透かしとして使用することを好まない(私のアプリは無料です)。
  3. 可能かどうかわかりませんが、おそらくアンドロイドブラウザ機能を使用していますか?アクティビティが進行状況バーだけを表示している間に、URLに隠れた方法で行くことがありますか? :)

誰かが多分何かを提供できますか?多分もっとネイティブの何か?

いずれの方向も気に入っています!

答えて

0

良い質問...それはおそらく十分ではないのですが、あなたはandroid.webkit.WebHistoryItemのgetFavicon()の呼び出しを介してウェブ履歴からサイトのファビコンを取得することができます:あなたがロードしようとすることができ http://developer.android.com/reference/android/webkit/WebHistoryItem.html AMB

+0

ありがとうございますが、それは私が意味するものではありません。ユーザーがブラウザを使用してこのURLに移動する前にブックマークサムネイルを取得したいと思います。つまり、このページへのリクエストをシミュレートし、生​​成されたサムネイルを取得する必要があります。 (例は、LauncherPro支払い、ブックマークウィジェット設定で見つけることができます)。 –

+0

私は言ったように、おそらく十分ではありません... android.webkit.WebView.capturePictureメソッド[http://developer.android.com/reference/android/webkit/WebView.html#capturePicture() ] – amb

+0

おかげさまで私はそれを調べます! –

0

faviconsは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 format is not supported officially by Androidという潜在的な問題があります。実際には、BitmapFactoryはほとんどのデバイスでicoフォーマットを問題なくデコードします。とにかく、私はそれがすべてのデバイスabsのicoをデコードすることはわかりません。

関連する問題