现阶段,HTML5+Native开发模式越来越盛行,那么我们就有必要学习一下Android中通过WebView和HTML5进行相互通信。
实现的效果图:
主界面是WebView加载html页面的。
分为两种情况:
- Activity向HTML传递数据,在HTML中进行展示。
- HTML向Activity传递数据,例如将HTML页面的数据在Activity的Dialog进行显示。
关键点:
- 定义一个类,在类中定义Android调用js , js调用Android需要的方法,js调用Android的方法需要@JavascriptInterface注解。
-
jsBridge = new JsBridge(webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(jsBridge, “bridge”);
bridge需要和js代码中的对象名相同。
实现步骤:
(1)定义JsBridge类,该类中定义html向Android传递数据,Android向html传递数据的方法。
public class JsBridge {
private WebView webView;
private Context context;
public JsBridge(WebView webView) {
this.webView = webView;
context = webView.getContext();
}
// js 调用java,获取联系人
@JavascriptInterface
public void jsReadContact() {
Intent intent = new Intent(context, ContactListActivity.class);
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// context.startActivityFor(intent);
((Activity) context).startActivityForResult(intent, 0x1000);
}
// activity向html传递数据
public void setJsData(String param) {
webView.loadUrl("javascript:javaCallJs(" + param + ")");
}
// html向activity传递数据
@JavascriptInterface
public void verifyEmail(String email) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("提示");
builder.setMessage(email + "");
builder.setPositiveButton("确定", null);
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
}