摘要:今天接到需求要调用相机拍照 但页面是H5写的 所以研究了下 android里 JAVA 代码和JS 相互调用这方面的姿势

一:JS调用 JAVA

1.首先让webview 支持JS

1
webView.getSettings().setJavaScriptEnabled(true);

2.注入 Java 对象到 WebView 中。

1
2
JSKit js = new JSKit(this);
mWebView.addJavascriptInterface(js, "myjs");
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* Created by zhush on 2016/5/3.
*/
public class JSKit {
private MainActivity ma;
public JSKit(MainActivity context) {
this.ma = context;
}
@JavascriptInterface
public void showMsg(String msg) {
Toast.makeText(ma, msg, Toast.LENGTH_SHORT).show();
}
}

注意:在 JELLY_BEAN_MR1以后 需要在被调用的方法上加 @JavascriptInterface 要不然调用会失败

[Android版本和API Level对应关系](http://blog.csdn.net/huiguixian/article/details/39928027)

3.JS代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html40/strict.dtd">
<HTML>
<HEAD>
<meta name="viewport" content="width=device-width, target-densitydpi=device-dpi" />
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script>
function showMsgInAndroid(){
myjs.showMsg('标识符');
}
</script>
</HEAD>
<BODY>
<span>测试js使用</span>
<button id='btntest' onclick='showMsgInAndroid()'>调用android方法</button>
</BODY>
</HTML>

二:JAVA调用JS

1.JAVA 代码

1
mWebView.loadUrl("javascript:funFromjs('"+imageUrl+"')")

2.JS代码

1
2
3
function funFromjs(str){
alert(str);
}

Demo下载:https://github.com/hui46226021/JSAndroidCallCamera.git