18

アンドロイドデバイスの内部メモリまたは外部メモリにHTML Webページを読み込んで取得する必要があります。私が必要とするのは、Webビューを使用してアンドロイドでWebページをダウンロードして取得することです。アンドロイドアプリケーションでオンラインモードとオフラインモードの両方でウェブページを読み込みまたは取得する方法は?

ウェブページのダウンロードや保存に似た質問が繰り返しあります。しかし、答えのどれも私を助けませんでした。教えて!

ありがとうございます。

+0

あなたはWebViewのために、この設定viewer.getSettings()setCacheMode(WebSettings.LOAD_DEFAULT)を試したことがありますか? – sha

答えて

6

は、このソリューションは、あなたがすべてのデータをフェッチするためのWebクローラを使用することができ、オフラインのmodとオンラインのmodでウェブサイトを閲覧したいyour.ifに適していますウェブサイトから。 Hereは、インターネットの可用性に基づいてURLまたはローカルメモリからWebサイトを読み込むことができるandroid web crawler.afterのサンプルプロジェクトです。

0

WebViewは、remotelocalのhtmlページをロードしてレンダリングすることができ、さらに'data' scheme URLをサポートします。

Storage Options

共有設定(あなたのケースでは有用ではない)のキーと値のペアで

ストアプライベートプリミティブデータ。 (お使いの場合に推奨)

内部ストレージデバイスメモリ上の

ストアプライベートデータ。

外部ストレージ共有外部ストレージに(あなたできあなたの場合での使用に推奨されません)

ストア公開データ。

SQLiteのデータベース(あなたあなたの場合での使用が、お勧めできません)

Storeはプライベート・データベース内のデータを構造化。

ネットワーク接続(あなたあなたの場合で使用することができますが、オフラインモードで動作しません)独自のネットワーク・サーバとウェブ上

ストアデータを。

0

あなたのWebViewに設定使用WebViewClientshouldInterceptRequest方法を使用しようとする場合があります。これにより、html読み込み処理中に読み込まれるすべてのリソースを知ることができます。あなたがファイルにHTMLコンテンツを格納し、その後、内部ストレージに保存することができますあなたの条件、 を実現することができる2つのリンク上で

WebViewClient webViewClient = new WebViewClient() { 
    @TargetApi(VERSION_CODES.LOLLIPOP) 
    @Override 
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { 
     WebResourceResponse response = null; 
     if ("GET".equals(request.getMethod())) { 
      try { 
       response = getWebResponse(view.getContext().getApplicationContext(), request.getUrl().toString()); 
      } catch (Exception e) { 
       Log.e(TAG, "Error while overriding getting web response", e); 
      } 
     } 
     return response; 
    } 

    @SuppressWarnings("deprecation") 
    @Override 
    public WebResourceResponse shouldInterceptRequest(WebView view, String url) { 
     WebResourceResponse response = null; 
     try { 
      response = getWebResponse(view.getContext().getApplicationContext(), url); 
     } catch (Exception e) { 
      Log.e(TAG, "Error while overriding getting web response", e); 
     } 
     return response; 
    } 

    WebResourceResponse getWebResponse(Context context, String url) { 
     // YOUR IMPLEMENTATION that will save resource located at passed url 
    } 
} 
webView.setWebViewClient(webViewClient); 
-1

キャッシュメモリにWebページを保存します。

WebView webView = new WebView(context); 
webView.getSettings().setAppCacheMaxSize(5 * 1024 * 1024); // 5MB 
webView.getSettings().setAppCachePath(getApplicationContext().getCacheDir().getAbsolutePath()); 
webView.getSettings().setAllowFileAccess(true); 
webView.getSettings().setAppCacheEnabled(true); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); // load online by default 

私にはわからないチェックこのリンクWebView load website when online, load local file when offline

0

これは私にとってシンプルなwebviewキャッシング機構のようです。

を試みるこの

WebView webView = new WebView(context); 
webView.getSettings().setAppCacheMaxSize(5 * 1024 * 1024); // 5MB 
webView.getSettings().setAppCachePath(getApplicationContext().getCacheDir().getAbsolutePath()); 
webView.getSettings().setAllowFileAccess(true); 
webView.getSettings().setAppCacheEnabled(true); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); // load online by default 

if (!isNetworkAvailable()) { // loading offline 
    webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
} 

方法isNetworkAvailable()アクティブなネットワーク接続をチェック:

private boolean isNetworkAvailable() { 
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
    return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
} 

webView.loadUrl( "http://www.google.com")。

最後に、あなたのAndroidManifest.xmlに以下の三つの権限を追加することを忘れないでください:。

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
関連する問題