Android与H5混合开发中获取H5存储在localStorage中的数据信息

时间:2022-08-26 08:27:27


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