作者: 燕歆波
导读: android与h5交互
1、首先设置WebView属性:
mWebview = new WebView(getApplicationContext());
mWebSettings = mWebview.getSettings();
mWebview.setPadding(0,0,0,0);
mWebSettings.setJavaScriptCanOpenWindowsAutomatically(false);//设置js可以直接打开窗口,如window.open(),默认为false
mWebSettings.setJavaScriptEnabled(true);//是否允许JavaScript脚本运行,默认为false。设置true时,会提醒可能造成XSS漏洞
mWebSettings.setSupportZoom(true);//是否可以缩放,默认true
mWebSettings.setBuiltInZoomControls(true);//是否显示缩放按钮,默认false
mWebSettings.setUseWideViewPort(true);//设置此属性,可任意比例缩放。大视图模式
mWebSettings.setLoadWithOverviewMode(true);//和setUseWideViewPort(true)一起解决网页自适应问题
mWebSettings.setAppCacheEnabled(true);//是否使用缓存
mWebSettings.setDomStorageEnabled(true);//开启本地DOM存储 一定要开启缓存,不然点击事件无法响应
mWebSettings.setLoadsImagesAutomatically(true); // 加载图片
mWebSettings.setMediaPlaybackRequiresUserGesture(false);//播放音频,多媒体需要用户手动?设置为false为可自动播放
fl_layout.addView(mWebview);
//加载本地网页
mWebview.loadUrl("file:///android_asset/index.html");
//设置js调用android的对象和别名
mWebview.addJavascriptInterface(new JSInterface(),"JSInterface");
2、接收js传入的信息,方法必须加上@JavascriptInterface注解
public class JSInterface{
/**
* js调用android结束();方法
* @param type html传给android的参数,来判断是否结束了
*/
@JavascriptInterface
public void postMsg(final String type) {
runOnUiThread(new Runnable() {
@Override
public void run() {
MobclickAgent.onEvent(WebViewActivity.this,FinalTags.TJ_GAMEOVER);
WebViewActivity.this.showAD(true);
}
});
}
}
3、编写Html网页
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-store,no-cache">
<meta name="Handheldfriendly" content="true">
<meta name="viewport" content="width=100%; initial-scale=1.0; user-scalable=yes">
<meta name="robots" content="all">
<meta name="keywords" contect="doodle, mobile, doodlemobile, game, games">
<meta name="description" content="Make People's Mobile Life More Connected Through Games.">
<title>jsandroid_test</title>
<script type="text/javascript" language="javascript">
//点击按钮调用android方法
function showHtmlcallJava() {
window.JSInterface.postMsg("结束");
}
//android调用html的方法
function reActivity(param) {
document.getElementById("id_input2").value = param;
}
</script>
</head>
<body>
<br />
<br />
<br />
<br />
<br />
<!--点击调用android的方法-->
<input type="button" value="HtmlcallJava" onclick="showHtmlcallJava()" />
<input id="id_input2" style="width: 90%" type="text" value="null" />
</body>
</html>
注意:
1、mWebview.addJavascriptInterface(new JSInterface(),"JSInterface");此方法传入了一个别名JSInterface,别名可以自定义,但是Html必须通过此别名调用传入的对象(new JSInterface())的方法,
2、html调用的方法名必须和JSInterface类中的方法名一致,否则无法成功
3、android端接收数据的方法(此处为postMsg方法)运行在子线程,如果需要刷新UI,请在主线程中进行!