2011-01-26 3 views
3

Я бы хотел получить веб-страницу по электронной почте по URL-адресу программным способом.Android: извлечение веб-страницы по URL-адресу программным путем

Совершено некоторый поиск и придумал несколько решений:

  1. с использованием свинг (JEditorPane) - но, как я понимаю & поправьте меня, если я ошибаюсь, это не представляется возможным использовать качели с Android приложения.
  2. , используя сторонний сайт с услугами api, например, thumbalizr.com - предпочитают не использовать это, поскольку он водяные знаки эскиза, если я не заплачу (мое приложение бесплатное).
  3. Не знаете, возможно ли это, но, возможно, использовать функцию браузера для Android? возможно, перейдите на URL-адрес скрытым способом, пока активность показывает только индикатор выполнения? :)

Может ли кто-нибудь предложить что-то, что работает? может быть, что-то более родное?

Цените в любом направлении!

ответ

0

хороший вопрос ... это, вероятно, не достаточно хорошо, но вы можете получить фавикон на сайт от веб-истории через getFavicon android.webkit.WebHistoryItem (в) по телефону: http://developer.android.com/reference/android/webkit/WebHistoryItem.html AMB

+0

Спасибо, но это не то, что я имел в виду. Я хочу получить эскиз закладки, прежде чем пользователь даже пойдет по этому URL-адресу с помощью браузера. Это означает, что мне нужно симулировать запрос на эту страницу и как-то извлекать сгенерированную миниатюру. (пример можно найти на платной закладке LauncherPro, в настройках виджета Bookmarks). –

+0

как я уже сказал, что, вероятно, недостаточно хорошо ... существует метод android.webkit.WebView.capturePicture [http://developer.android.com/reference/android/webkit/WebView.html#capturePicture() ] – amb

+0

спасибо, я посмотрю! –

0

Вы можете попытаться загрузить favicons с использованием HttpClient. 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 на абс всех устройствах.

Смежные вопросы