在我的android应用程序中需要检测缓存是否存在。目前我正在加载网页,如果有互联网可用。如果无法使用Internet,则可以使用以下代码从缓存中加载页面。
if (networkInfo.isConnected()) {
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); // load online by default
} else {
// loading offline
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
}
在上面的代码中,我需要为互联网添加一个条件不可用,缓存也不可用,然后我需要向用户显示消息。因此,计划识别任何缓存都可用于webview。但是无法找到确定缓存的方法。
有以下想法,但不知道如何实现我的目标。 1.找出一种weview或webviewsettings方法,以返回isCacheAvailable方法。没找到它。 2.找出webview缓存文件的确切路径。这样我就可以检查文件大小以确定可用的缓存。但是没有找到获取webview缓存目录的确切路径的方法。
请帮我找出一种识别webview缓存的方法。
答案 0 :(得分:1)
webview缓存的路径为1
所以方法可以
getApplicationContext().getCacheDir()
答案 1 :(得分:0)
webview缓存保存在/data/data/[your_package_name]/cache/org.chromium.android_webview文件夹中。
答案 2 :(得分:0)
这对我有用
是5是一个魔术数字,实际文件数约为50
清除缓存文件后,计数为2-3
class WebClient : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
return false
}
override fun onReceivedError(view: WebView, errorCode: Int, description: String?, failingUrl: String) {
view.apply {
File(context.cacheDir, "org.chromium.android_webview").let {
if (!it.exists() || it.listFiles()?.size ?: 0 < 5) {
// not cached
}
}
}
}
@TargetApi(Build.VERSION_CODES.M)
override fun onReceivedError(view: WebView, req: WebResourceRequest, rerr: WebResourceError) {
onReceivedError(view, rerr.errorCode, rerr.description?.toString(), req.url.toString())
}
}