public class MainActivity extends Activity {
private WebView webview;
private String URL = "http://192.168.1.224:8080/app/aaa.html";// 這是你要訪問你html文件的存放地址,我這個是放在appache中的word文件夾下的login.html文件
private Handler mHandler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webview = (WebView) findViewById(R.id.webView1);
WebSettings webset = webview.getSettings();
webset.setJavaScriptEnabled(true);// 啓用JS腳本,這個一定要加上,不然就調用不了,無法交互,因爲調用的方法寫在js裏面
// webset.setUseWideViewPort(true); // 上下自適應屏幕
webset.setLoadWithOverviewMode(true); // 自適應屏幕
webview.setWebChromeClient(new WebChromeClient() {
});
webview.addJavascriptInterface(new JsObject(), "jsObject");
webview.loadUrl(URL);
}
public class JsObject {
@JavascriptInterface
//@JavascriptInterface必須寫上,不寫上也實現不了交互
//這個方法不是在ui線程中的。可以通過handler.post發送到ui線程執行。可以用Thread.currentThread.getId查看線程的id
public void getMessage(String name, String pwd) {
// TODO Auto-generated method stub
mHandler.post(new Runnable() {
public void run(){
System.out.println("===" + "name:" + name + "---pwd:" + pwd);
Toast.makeText(MainActivity.this, "user="+name+"==pw="+pwd, Toast.LENGTH_SHORT).show();
}
});
}
}
}
html文件代碼
<!DOCTYPE html>
<html>
<head>
<script>
function login(){
var th = document.form;
var user = th.user.value;
if(user==""){
alert("請輸入用戶名!");
}else{
var name = th.user.value;
var pwd = th.pwd.value;
var name2 = jsObject.getMessage(name,pwd);
}
}
</script>
</head>
<body>
<form name='form' method='post' class='form' action=''>
<table id='login_table'>
<tr>
<td>
<span>賬號:</sapn>
</td>
<td>
<input type='text' class='usr' name='user' value=''/>
</td>
<td></td>
</tr>
<tr>
<td>
<span>密碼:</sapn>
</td>
<td>
<input type='password' class='psw' name='pwd' value=''/>
</td>
<td></td>
</tr>
<tr>
<td></td>
<td>
<input type="file" value="上傳圖片" />
<button class='denglu' οnclick="login()">登陸</button>
<button class='clear'>清空</button>
</td>
<td></td>
</tr>
</table>
</form>
</body>
</html>
可以把上面的html放在tomcat的webapps目錄下,也可以直接放在android項目的assets文件夾中,這個時候讀取的url就是webview.loadUrl(file:///android_asset/aaa.html);
點擊登錄的時候,會調用js的login方法,在login方法中先會判斷用戶名是不是爲空,爲空就彈出提示,不爲空的話就獲取輸入的用戶名和密碼,然後再調用android的getmessage(),把用戶名和參數的方法傳遞到android,在手機端就能彈出提示的toast,實現了webView和js的交互。這裏是js調用了android中提供的方法
通過上面的方法。可以知道,要想獲得經緯度的話,先點擊一個按鈕,通過js調用android中的方法獲取經緯度,然後android獲取到經緯度之後必須再通知js,告訴他這個經緯度我已經拿到了。也就是在獲得經緯度後再調用js中的function方法,在這個function方法中再次調用android中的另一個有返回值的方法來返回這個經緯度給js