Android与H5混合开发中获取H5存储在localStorage中的数据信息
android在开发中与H5交互,互相对方的方法已经不是啥稀罕事,因此有了混合开发,而在开发中,或许某些功能需要获取H5存储于localStorage中的值,在实现此功能上有两种方法可以获取,与其说是两种,不如说一种,因为这两种方法大同小异。
- 双方合作实现
- Android单方实现
(一) 双方合作实现
1.android端实现addjavascriptInterface
web.addJavascriptInterface(new H5LocalStorageCacheSize(MainActUI.this), "getH5CacheSize"); //获取信息
上句代码中,"getH5CacheSize"是双方拟定的对象,用来调用需要调用的方法,addJavascriptInterface则是为webview添加所需要传值的方法。
2.H5LocalStorageCacheSize这个类中实现了调用的方法如下:
public class H5LocalStorageCacheSize {
private Context context;
public H5LocalStorageCacheSize(Context context){
this.context=context;
}
@JavascriptInterface
public void getCacheSize(String cacheSize){
Log.i("cpf", "getCacheSize: "+cacheSize+"=======================");
}
}
H5在传输中只需要调用 getH5CacheSize.getCacheSize(“20.07M”); 就可以将缓存大小传递给android端。
(二) Android单方实现
如果将这个功能只让Android单方实现的话无非就是把H5的工作交给Android来做,这就需要Android人员需要具备一定的H5知识。
1.如上编写H5LocalStorageCacheSize类。
2.如上添加 addJavascriptInterface这个接口
3.编写js实现获取localStorage中的cachesize变量,调用双方共知的H5LocalStorageCacheSize中的getCacheSize(String cacheSize)来回调获取缓存大小,代码如下,
web.loadUrl("javascript:(function(){var localStorage = window.localStorage; window.getH5CacheSize.getCacheSize(localStorage.getItem('cachesize'))})()");
通过以上代码就会在log中显示出缓存大小。
而我们在开发项目中获取缓存大小无非就是用来显示多少,提供用户清除缓存的功能,想想,我们既然能够获取到缓存大小,如果清除成功后,那直接将localStorage中的缓存大小设置为0.00M不就好了,如下
String js = "window.localStorage.setItem('cachesize','" + cacheSize + "');";
String jsUrl = "javascript:(function({ var localStorage = window.localStorage; localStorage.setItem('cachesize','" + cacheSize + "') })()";
//2.根据不同版本,使用不同的 API 执行 Js
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
web.evaluateJavascript(js, null);
} else {
web.loadUrl(jsUrl);
// web.reload();
}
if (!cacheSize.isEmpty()) {
web.loadUrl("javascript:ClearWithCache('" + cacheSize + "')");
informH5CacheSize.destoryRun();
}
以上代码借鉴如下链接,感谢
http://blog.csdn.net/u011240877/article/details/52839845