您的位置:首页 > 移动开发 > Android开发

Android和html5的js交互

2016-05-30 10:38 323 查看
最近比较流行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:点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: