Android WebView缓存数据目录?

Android WebView缓存数据目录?,android,webview,sd-card,browser-cache,Android,Webview,Sd Card,Browser Cache,在我的代码中,我将自定义缓存目录设置为SD卡,并将“WebView.getSettings().setAppCachePath”(“”)指向该路径,但操作系统将缓存发送到默认缓存(/data/data/com.your.package.appname/cache)。正在正确地创建自定义目录,但数据没有进入其中。我使用自定义目录的原因是缓存将是大的和临时的,因此我需要用户能够删除特定的缓存 我是不是遗漏了什么?我们将一如既往地感谢您的任何帮助、代码或建议 多谢各位 public class Doc

在我的代码中,我将自定义缓存目录设置为SD卡,并将“WebView.getSettings().setAppCachePath”(“”)指向该路径,但操作系统将缓存发送到默认缓存(/data/data/com.your.package.appname/cache)。正在正确地创建自定义目录,但数据没有进入其中。我使用自定义目录的原因是缓存将是大的和临时的,因此我需要用户能够删除特定的缓存

我是不是遗漏了什么?我们将一如既往地感谢您的任何帮助、代码或建议

多谢各位

public class DocumentView extends Activity {
 /**
 * -- Called when the activity is first created.
 * ================================================
 **/
@Override
public void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

String l = getIntent().getStringExtra("LABEL");
    CreateCacheDirectory();

     /**
     * -- Set up the WebView
     * ========================================================
     **/

    final String url = getIntent().getStringExtra("url");// get url that
                                                        // passed from
                                                       // previous
                                                      // Activity
    mWebView = (WebView) findViewById(R.id.webView1);

    mWebView.getSettings().setDomStorageEnabled(true);

    // Set cache size to 8 mb by default. should be more than enough
    mWebView.getSettings().setAppCacheMaxSize(1024 * 1024 * 8);

    // The DEFAULT location for the cache
    mWebView.getSettings().setAppCachePath(extStorageDirectory
            + "/myCompany/myApp/cache/" + l);
    mWebView.getSettings().setAllowFileAccess(true);
    mWebView.getSettings().setAppCacheEnabled(true);
    mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

    mWebView.loadUrl(url);

    mWebView.setWebChromeClient(new WebChromeClient() {
        public void onProgressChanged(WebView view, int progress) {
            activity.setProgress(progress * 100);
            pd.show();

            if (progress == 100)
                pd.dismiss();
        }

        @Override
        public void onReachedMaxAppCacheSize(long spaceNeeded,
                long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
            quotaUpdater.updateQuota(spaceNeeded * 2);
        }

    });

    mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public void onReceivedError(WebView view, int errorCode,
                String description, String failingUrl) {
            // The redirect
            if (url.equals(failingUrl)) {
                // error.html is the place we are redirected to by the
                // server if we are online
                mWebView.loadUrl("http:www.aero-technologies.us/error.html");
                return;
            } else if (url.equals(failingUrl)) { // The cache failed – We
                                                // don't have an offline
                                               // version to show
                // This code removes the ugly android's "can't open page"
                // and simply shows a dialog stating we have no network
                view.loadData("", "text/html", "UTF-8");
                // TODO -->showDialog(DIALOG_NONETWORK);
            }
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    });

public void CreateCacheDirectory() {
    if (android.os.Environment.getExternalStorageState().equals(
            android.os.Environment.MEDIA_MOUNTED)) {

        String l = getIntent().getStringExtra("LABEL");

        extStorageDirectory = Environment.getExternalStorageDirectory()
                .toString();

        File cacheDirectory = new File(extStorageDirectory
                + "/myCompany/myApp/cache/" + l);// Create a Folder object
                                                           // for the parent
                                                          // directory
        cacheDirectory.mkdirs();// Have the object build the folder
                               // if needed.

    } else if (android.os.Environment.getExternalStorageState().equals(
            android.os.Environment.MEDIA_MOUNTED_READ_ONLY)) {

        Alerts.sdCardMissing(this);
    }

}

通过阅读WebSettings代码可以看出,WebSettings上的缓存配置仅适用于HTML5应用程序:


这是2014年11月底修复的,因此可能会影响6.0(API 23)以下的所有Android版本。

谢谢,我已经知道这一点,HTML必须附带缓存清单文件。我面临同样的问题。虽然我设置了自己的自定义路径,但webview使用默认缓存路径。这是安卓4.4.2,联想S8-50LC型号。