今天在浏览的时候看到android跟js的交互,就想的学习一下,上网搜了很多资料,感觉还不是太难,就自己动手试了下,结果出了很多问题
说起交互其实很简单,只是可能sdk的版本或是别的一些小问题会困扰很长时间:
这是代码:
package wst.webview;
import android.annotation.suppresslint;
import android.app.activity;
import android.os.bundle;
import android.view.view;
import android.view.view.onclicklistener;
import android.webkit.javascriptinterface;
import android.webkit.webview;
import android.widget.button;
import android.widget.textview;
import android.widget.toast;
public class mainactivity extends activity {
private webview contentwebview = null;
private textview msgview = null;
@suppresslint("setjavascriptenabled")
@override
public void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.main);
contentwebview = (webview) findviewbyid(r.id.webview);
msgview = (textview) findviewbyid(r.id.msg);
// 启用javascript
contentwebview.getsettings().setjavascriptenabled(true);
// 从assets目录下面的加载html
contentwebview.loadurl("file:///android_asset/wst.html");
button button = (button) findviewbyid(r.id.button);
button.setonclicklistener(btnclicklistener);
contentwebview.addjavascriptinterface(this, "android");
}
onclicklistener btnclicklistener = new button.onclicklistener() {
public void onclick(view v) {
// 无参数调用
contentwebview.loadurl("javascript:javacalljs()");
// 传递参数调用
contentwebview.loadurl("javascript:javacalljswithargs(" + "'nimabi'" + ")");
}
};
public void startfunction() {
toast.maketext(this, "js调用了java函数", toast.length_short).show();
runonuithread(new runnable() {
@override
public void run() {
msgview.settext(msgview.gettext() + "\njs调用了java函数");
}
});
public void startfunction(final string str) {
toast.maketext(this, str, toast.length_short).show();
msgview.settext(msgview.gettext() + "\njs调用了java函数传递参数:" + str);
}
还有html的代码:这是在assets文件夹下
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=gb2312">
<script type="text/javascript">
function javacalljs(){
document.getelementbyid("content").innerhtml +=
"<br\>java调用了js函数";
function javacalljswithargs(arg){
("<br\>"+arg);
function showandroidtoast(toast) {
wst.showtoast(toast);
</script>
</head>
<body>
this is my html <br/>
<a onclick="window.android.startfunction()">点击调用java代码</a><br/>
<a onclick="window.android.startfunction('helloworld')" >点击调用java代码并传递参数</a>
<br/>
<div id="content">内容显示</div>
</body>
</html>
我今天主要遇到的问题是java调用js可以实现,但是js调用java代码没有反应,在网上查到说是注入的问题,但是注入了也不能用,想的既然版本限制的问题,然后我删掉清单文件中的
<uses-sdk
android:minsdkversion="7"
android:targetsdkversion="16" />
程序就ok了,搞通这个以后就可以实现android跟js间数据传递。