WebView缓存数据目录?

问题描述:

在我的代码中,我有一个自定义的缓存目录设置为SD卡,我指向'WebView.getSettings()。setAppCachePath(“”)',但操作系统将缓存发送到默认缓存(/ data/data /com.your.package.appname/cache)。自定义目录正确创建的位置应该是,但数据不会进入它。我使用自定义目录的原因是缓存的大小和临时性,所以我需要用户能够删除特定的缓存。WebView缓存数据目录?

我在这里错过了什么吗?任何帮助,代码或建议将一如既往地受到赞赏。

谢谢你。

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); 
    } 

} 
+0

我面临着同样的问题。虽然我设置了自己的自定义路径,但webview使用默认缓存路径。这是Android 4.4.2,联想S8-50LC机型。 – nagu 2015-09-24 11:12:26

从我能阅读的WebSettings代码告诉,在WebSettings缓存配置仅适用于HTML5应用:

http://www.grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.3_r1/android/webkit/WebSettings.java#181

+0

谢谢我已经知道了这一点,HTML必须附带一个缓存清单文件。 – CelticParser 2011-06-13 15:02:40