webview的简单加载
webView.loadUrl("https://www.baidu.com/");
加载前需要设置一些属性,如:
WebSettings webSettings = webView.getSettings();
webSettings.setDomStorageEnabled(true); //保存数据
webSettings.setJavaScriptEnabled(true); //启用js
webSettings.setBlockNetworkImage(false); //解决图片不显示
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
h5获取Android数据
webView.addJavascriptInterface(new JSInterface(),"eBookJsInterface");
其中JSInterface()为内部类
public class JSInterface{
@SuppressLint("JavascriptInterface")
@JavascriptInterface
public boolean viewRegulationChanged(){
return isViewRegulation;
}
@JavascriptInterface
public boolean opeRegulationChanged(){
return isOpeRegulation;
}
}
js可以调用其中函数,从而获取到内部数据。
Android向h5主动发送数据
找到一个好用的方法,可以不用刷新界面,调用js端函数。
webView.evaluateJavascript("javascript:viewRegulationChanged()", new ValueCallback() {
@Override
public void onReceiveValue(String value) {
//此处为 js 返回的结果
Log.i(TAG, "onReceiveValue: sendRegulationToJs success");
}
});
其中javascript:viewRegulationChanged()为js端函数名,调用成功后,会输出onReceiveValue中的log。
需要注意的是,如果报错:All WebView methods must be called on the same thread.
则需要切换线程即:
webView.post(new Runnable() {
@Override
public void run() {
webView.evaluateJavascript("javascript:viewRegulationChanged()", new ValueCallback() {
@Override
public void onReceiveValue(String value) {
//此处为 js 返回的结果
Log.i(TAG, "onReceiveValue: sendRegulationToJs success");
}
});
}
});