Сохранение/чтение Web-страниц

  1. private final String webarchive = "application/x-webarchive-xml";
  2. @TargetApi(Build.VERSION_CODES.HONEYCOMB)
  3. private boolean savePage(WebView view, String folder, String name) {
  4.  
  5.     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
  6.         String path = (folder.endsWith("/") ? folder : folder.concat("/"))
  7.                 .concat(name);
  8.  
  9.         try {
  10.             File file = new File(folder);
  11.             if (!file.exists()) return false; //IO error
  12.         } catch (Exception ex) {
  13.             ex.printStackTrace();
  14.             return false; //IO error
  15.         }
  16.  
  17.         try {
  18.             File file = new File(path);
  19.             if (!file.exists()) {
  20.                 file.createNewFile();
  21.                 if (!file.exists())
  22.                     return false; //invalid filename
  23.             }
  24.             file.delete();
  25.  
  26.             file = null;
  27.         } catch (Exception ex) {
  28.             ex.printStackTrace();
  29.             return false;
  30.         }
  31.         view.saveWebArchive(path);
  32.         return true; //OK
  33.     } else
  34.         return false; //sdk not supported, need SDK >= API11
  35.  
  36. }
  37.  
  38. //NOTE: need Internet connection for correct loading saved page
  39. private boolean readWebPage(WebView view, String fileName) {
  40.     try {
  41.         File file = new File(fileName);
  42.         FileInputStream is = new FileInputStream(file);
  43.         byte[] buffer = new byte[(int) file.length()];
  44.         is.read(buffer);
  45.         is.close();
  46.         String data = new String(buffer, "UTF-8");
  47.         buffer = null;
  48.         int start = data.indexOf("<url>") + "<url>".length();
  49.         int end = data.indexOf("</url>", start);
  50.         String url = new String(Base64.decode(data.substring(start, end),
  51.                 Base64.DEFAULT), "UTF-8");
  52.         addressEdit.setText(url);
  53.         view.loadDataWithBaseURL(null /*base url, if use RFC scheme http, ftp etc, this method equals loadData()*/,
  54.             data, webarchive, "UTF-8", url/*history url for reloading page if use forward navigation*/);
  55.         data = null;
  56.         return true;
  57.     } catch (Exception ex) {
  58.         ex.printStackTrace();
  59.     }
  60.     return false;
  61. }
1) будет работать на Android 3.0 и выше
2) нужно интернет соединение, чтобы вебкит корректно загрузил страничку (она НЕ ПЕРЕЗАГАРУЖАЕТЬСЯ(!) из сети)

Реклама

Мы в соцсетях

tw tg yt gt