Android和html5的js交互

最近比较流行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,对应当前projectasserts目录

// 也可以写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:点击打开链接


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值