android中的webview如何检测缓存?

时间:2016-04-29 08:05:12

标签: android webview android-webview android-websettings

在我的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缓存的方法。

3 个答案:

答案 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())
    }
}