Android オフライン時にWebViewキャッシュを参照する


オフラインであるかの判定は前回の記事、

www.letitride.jp

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ページを表示することが可能。