オフラインであるかの判定は前回の記事、
のisNetworkAvailable()
を使用して取得しています。
WebViewキャッシュまわりの設定
状態によりcacheModeを切り替えればよい。
val webView = findViewById<WebView>(R.id.webView) webView.settings.setAppCachePath(applicationContext.cacheDir.absolutePath) webView.settings.allowFileAccess = true webView.settings.setAppCacheEnabled(true) webView.settings.javaScriptEnabled = true //基本はネットワークから参照する webView.settings.cacheMode = WebSettings.LOAD_DEFAULT //オフライン時はキャッシュ取得を試みる if ( isNetworkAvailable(context) ) { // when offline webView.settings.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK } webView.loadUrl( url )
また、layoutにWebViewを配置せずとも
val webView = WebView(context) //...中略 //キャッシュがある場合は通信しない webView.settings.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK webView.loadUrl( url)
とコード上でWebViewを生成することで、urlを先読みしてキャッシュを構築することが出来る。
生成したキャッシュを読むことで、オフライン時にはキャッシュされたWebページを表示することが可能。