Android的webview支持HTML5的离线应用功能详细配置
程序员文章站
2023-12-04 11:11:46
html5的离线应用功能可以使得webapp即使在网络断开的情况下仍能正常使用,这是个非常有用的功能。近来工作中也要用到html5离线应用功能,由于是在android平台上...
html5的离线应用功能可以使得webapp即使在网络断开的情况下仍能正常使用,这是个非常有用的功能。近来工作中也要用到html5离线应用功能,由于是在android平台上做,所以自然而然的选择webview来解析网页。但如何使webivew支持html5离线应用功能呢,经过反复摸索和上网查找资料,反复做试验终于成功了。
首先需配置webview的的一些属性,假设activity中已经有了一个webview的实例对象,名为m_webview,然后增加以下代码:
websettings webseting = m_webview.getsettings();
webseting.setdomstorageenabled(true);
webseting.setappcachemaxsize(1024*1024*8);//设置缓冲大小,我设的是8m
string appcachedir = this.getapplicationcontext().getdir("cache", context.mode_private).getpath();
webseting.setappcachepath(appcachedir);
webseting.setallowfileaccess(true);
webseting.setappcacheenabled(true);
webseting.setcachemode(websettings.load_default);
webview可以设置一个webchromeclient对象,在其onreachedmaxappcachesize函数对扩充缓冲做出响应。代码如下
m_webview.setwebchromeclient(m_chromeclient);
private webchromeclient m_chromeclient = new webchromeclient(){
//扩充缓存的容量
@override
public void onreachedmaxappcachesize(long spaceneeded,
long totalusedquota, webstorage.quotaupdater quotaupdater) {
quotaupdater.updatequota(spaceneeded * 2);
}
};
其次要修改http服务器中的配置,使其支持text/cache-manifest,我使用的是apache服务器,是windows版本的,在apache的conf文件夹中找到mime.types文件,打开后在文件的最后加上
“text/cache-manifest mf manifest”,重启服务器即可。这一步很重要,我就是因为服务器端没有配置这个,所以失败了好多次,最后是在附录链接1的回复中找到的线索。
经过以上设置webview就可以支持html5的离线应用了。
附录链接1中说缓冲目录应该是getapplicationcontext().getcachedir().getabsolutepath();但我经过试验后发现设置那个目录不起作用,可能是android版本不同吧,我的是android4.0.3,而他的可能是以前的android版本吧。
缓冲目录使用getapplicationcontext().getdir("cache", context.mode_private).getpath()是从附录链接2中找到的线索。
首先需配置webview的的一些属性,假设activity中已经有了一个webview的实例对象,名为m_webview,然后增加以下代码:
复制代码 代码如下:
websettings webseting = m_webview.getsettings();
webseting.setdomstorageenabled(true);
webseting.setappcachemaxsize(1024*1024*8);//设置缓冲大小,我设的是8m
string appcachedir = this.getapplicationcontext().getdir("cache", context.mode_private).getpath();
webseting.setappcachepath(appcachedir);
webseting.setallowfileaccess(true);
webseting.setappcacheenabled(true);
webseting.setcachemode(websettings.load_default);
webview可以设置一个webchromeclient对象,在其onreachedmaxappcachesize函数对扩充缓冲做出响应。代码如下
复制代码 代码如下:
m_webview.setwebchromeclient(m_chromeclient);
private webchromeclient m_chromeclient = new webchromeclient(){
//扩充缓存的容量
@override
public void onreachedmaxappcachesize(long spaceneeded,
long totalusedquota, webstorage.quotaupdater quotaupdater) {
quotaupdater.updatequota(spaceneeded * 2);
}
};
其次要修改http服务器中的配置,使其支持text/cache-manifest,我使用的是apache服务器,是windows版本的,在apache的conf文件夹中找到mime.types文件,打开后在文件的最后加上
“text/cache-manifest mf manifest”,重启服务器即可。这一步很重要,我就是因为服务器端没有配置这个,所以失败了好多次,最后是在附录链接1的回复中找到的线索。
经过以上设置webview就可以支持html5的离线应用了。
附录链接1中说缓冲目录应该是getapplicationcontext().getcachedir().getabsolutepath();但我经过试验后发现设置那个目录不起作用,可能是android版本不同吧,我的是android4.0.3,而他的可能是以前的android版本吧。
缓冲目录使用getapplicationcontext().getdir("cache", context.mode_private).getpath()是从附录链接2中找到的线索。