如何将WebView缓存移动到SD卡?

6

我看到一些应用程序,比如Dolphin浏览器(不是高清版,而是普通版),利用缓存到SD卡的方式来进行Webview,但我似乎无法弄清楚如何实现这一点,有人知道如何做或指导我吗?非常感谢任何帮助!谢谢 :)

2个回答

6

这里是一篇文章,详细描述了如何将Webview缓存存储更改为使用SD卡:

http://www.devahead.com/blog/2012/01/saving-the-android-webview-cache-on-the-sd-card/

我已经在我的应用程序中测试过,证明它能正常工作。

public class MainApplication extends Application {
    // ...

    @Override
    public File getCacheDir() {
        // NOTE: this method is used in Android 2.2 and higher
        File cachePath = this.getExternalCachePath();
        return cachePath != null ? cachePath : super.getCacheDir();
    }

    private File getExternalCachePath() {
        if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
            File externalStorageDir = Environment.getExternalStorageDirectory();
            // {SD_PATH}/Android/data/com.package.name/cache
            File extStorageAppCachePath = new File(externalStorageDir, "Android" + File.separator + "data" + File.separator + this.getPackageName() + File.separator + "cache");

            return extStorageAppCachePath;
        }

        return null;
    }
}

public class SomeWebViewActivity extends Activity {
    // ...

    @Override
    public File getCacheDir() {
        // Android 2.1 and lower
        return this.getApplicationContext().getCacheDir();
    }
}

在一些设备上(例如三星),Environment.getExternalStorageDirectory() 指向一个内部 SD 分区。是的,这并不是很合乎逻辑,但事实就是如此。 - Luis A. Florit
@LuisA.Florit 一些人已经问过如何在三星设备上获取外部存储路径的问题,但答案非常hacky,并且可能在某些设备上无法使用:https://dev59.com/01XTa4cB1Zd3GeqP5dMb - vortexwolf

1

嗯,WebSettings 对象有许多 set...Path() 方法。不清楚它们中是否有任何一个是用于实际缓存的。还有一个 CacheManager 对象,它有一堆与缓存相关的静态方法,但没有明显的方法来更改缓存位置。


我在谷歌搜索中也找不到任何答案,但我真的很想知道其他人是如何成功地将缓存从内部存储设备完全移动到SD卡上的。你有其他想法吗? - Malcolm Lim
1
是的,ws.setAppCachePath(cachedir) 存在,但它所做的只是创建一个空的 /cachedir/ApplicationCache.db 文件。我不知道如何解决这个问题。 - Luis A. Florit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接