最近比较流行android和html5混合开发,那么彼此间的交互效果是少不了的,就是最基本的h5嵌套有的时候也需要彼此控制,那么该怎么实现呢?接下来看代码......
H5:
/*
function ValueFromAndroid(obj){
document.getElementById("web").innerHTML=obj;
}
function shareAnIos(){ //用于标识 比如登陆传login 我就调用android微信登陆 传wxapy 我就掉微信支付 var lei = "login"; try{ myObj.ValueFromJS(lei); //调用安卓 方法 }catch(error){ console.log(error) }finally{ }}*/
Android:
private static boolean isExit = false;
/**
* WebView就是一个简单的浏览器,android浏览器源码存在于LINUX/android/package/apps/Browser中
* 里面的所有操作都是围绕WebView来展开的
*/
WebSettings settings = wv_hry.getSettings();
// 设置编码
settings.setDefaultTextEncodingName("utf-8");
// 是否支持支持js
settings.setJavaScriptEnabled(true);
// 是否支持保存密码
settings.setSavePassword(false);
// 是否支持保存数据
settings.setSaveFormData(false);
// 是否支持访问文件数据
settings.setAllowFileAccess(true);
settings.setDomStorageEnabled(true);
// 调整到原webview的大小
settings.setUseWideViewPort(true);
// 支持自动加载图片
settings.setLoadsImagesAutomatically(true);
// 是否支持缩放
settings.setSupportZoom(false);
// 设置背景颜色 透明
wv_hry.setBackgroundColor(Color.argb(0, 0, 0, 0));
// 设置本地调用对象及其接口
wv_hry.addJavascriptInterface(new JavaScriptObject(mContext), "myObj");
// 载入js,对应当前project的asserts目录
// 也可以写file:///sdcard/index.html
wv_hry.loadUrl("http://139.224.56.54/hry/index.php");
wv_hry.setWebViewClient(new SimonWebViewClient());
//处理h5弹框
wv_hry.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
return super.onJsAlert(view, url, message, result);
}
});
//非点击时获取数据和传送数据
wv_hry.post(new Runnable() {
@Override
public void run() {
String url = wv_show.getUrl();
String title = wv_show.getTitle();
}
});
}
/**
* 给js传递数据
* @param view
*/
public void clickButton(View view) {
wv_hry.loadUrl("javascript:ValueFromAndroid('" + "simon" + "')");
}
/**
* 获取js数据
* @author Simon
*/
class JavaScriptObject {
Context mContxt;
public JavaScriptObject(Context mContxt) {
this.mContxt = mContxt;
}
/**
* 返回的字符串数量不限
* @param value1
*/
@JavascriptInterface
public void ValueFromJS(String value1, String value2) {
Log.i("Simon", "-------------------" + "value1 = " + value1
+ " value2 = " + value2);
}
}
class SimonWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
/**
* 双击退出
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
String currentUrl = wv_hry.getUrl();
String firstUrl = "http://139.224.56.54/hry/index.php";
String secondeUrl = "http://139.224.56.54/hry/index.php/earnings";
String thirdUrl = "http://139.224.56.54/hry/index.php/service";
String fourthUrl = "http://139.224.56.54/hry/index.php/mine";
if (currentUrl.equals(firstUrl) || currentUrl.equals(secondeUrl)
|| currentUrl.equals(thirdUrl)
|| currentUrl.equals(fourthUrl)) {
exit();// 这里也可以弹出对话框
} else {
wv_hry.canGoBack();
wv_hry.goBack();
}
}
return false;
}
private void exit() {
if (!isExit) {
isExit = true;
Toast.makeText(this, "在按一次退出程序", Toast.LENGTH_SHORT).show();
new Timer().schedule(new TimerTask() {
@Override
public void run() {
isExit = false;
}
}, 2000);
} else {
finish();
}
}
DEMO:点击打开链接