今天在浏覽的時候看到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間資料傳遞。