Android與JS的交互(下)

         本博文共分爲Android與JS的交互(上)和Android與JS的交互(下)兩篇,上篇主要介紹怎樣快速把工程中的jsdemo.html部署到Apache服務器上,對應的軟件和代碼如下面所附鏈接,下篇主要介紹安卓客戶端和JS的交互。

         文中對應的軟件資源下載地址:

          1、apache-tomcat-7.0.6 : http://download.csdn.NET/detail/u010857510/9546800

          2、JSDemo_Pro:http://download.csdn.net/detail/u010857510/9648021

安卓客戶端和JS的交互

一、首先分析一下JS代碼

下面分別是四種形式的方法

<script type="text/javascript" language="javascript"> 

function showHtmlcallJava(){
var str = window.jsdemo.HtmlcallJava();
alert(str);
}

function showHtmlcallJava2(){
var str = window.jsdemo.HtmlcallJava2(":歡迎!");
alert(str);
}

function showFromHtml(){
document.getElementById("id_input").value = "JAVA調用HTML網頁JS方法";
}

function showFromHtml2( param ){
document.getElementById("id_input2").value = "JAVA調用HTML網頁JS帶參方法: " + param; 
}
</script>

四種方法對應的按鈕代碼

body>
<p>這是一個安卓客戶端嵌入HTML網頁的一個簡單調試,HTML網頁部署在Apache服務器上,HTML嵌入了JS語言,實現了JS與安卓客戶端的交互


<br><br>1、點擊按鈕一通過JS調用Android的JAVA方法;
<br><input type="button" value="按鈕一" onclick="showHtmlcallJava()" />


<br><br>2、點擊按鈕二通過JS帶參調用Android的JAVA方法;
<br><input type="button" value="按鈕二" onclick="showHtmlcallJava2()" />


<br>
<br><br>3、點擊按鈕三調用Android的JAVA方法,JAVA調用HTML網頁JS方法;
<br><input id="id_input" style="width: 90%" type="text" value="" />
<br><input type="button" value="按鈕三" onclick="window.jsdemo.JavacallHtml()" />


<br><br>4、點擊按鈕四調用Android的JAVA方法,JAVA調用HTML網頁JS帶參方法;
<br><input id="id_input2" style="width: 90%" type="text" value="" />
<br><input type="button" value="按鈕四" onclick="window.jsdemo.JavacallHtml2()" />


</body>

二、安卓客戶端的JAVA和JS交互的代碼

首先一定要在安卓清單文件中申請網絡權限,不申請的話,你是連接不上上篇中提到的服務器的

 <uses-permission android:name="android.permission.INTERNET" />

顯示的WEB界面的是安卓自帶的webkit功能WebView,代碼如下

@SuppressLint("SetJavaScriptEnabled")
private void showWebView(){
try {
mWebView = new WebView(this);
setContentView(mWebView);
mWebView.requestFocus();
mWebView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int progress){
JSDemo.this.setProgress(progress);
if(progress >= 80) {
JSDemo.this.setTitle("jsdemo Test");
}
}
});

mWebView.setOnKeyListener(new View.OnKeyListener() { // webview can go back
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return false;
}
});

WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDefaultTextEncodingName("utf-8");


mWebView.addJavascriptInterface(getHtmlObject(), "jsdemo");
mWebView.loadUrl("http://192.168.1.101:8080/jsdemo.html");
} catch (Exception e) {
e.printStackTrace();
}
}

注意倒數第五句代碼中mWebView.loadUrl("http://192.168.1.101:8080/jsdemo.html");的192.168.1.101就是你上一篇中查詢的IP地址,這裏要改成你的IP地址,否則你運行我的程序達不到效果

倒數第六句代碼mWebView.addJavascriptInterface(getHtmlObject(), "jsdemo");中getHtmlObject()的代碼如下

private Object getHtmlObject(){
@SuppressWarnings("unused")
Object Obj = new Object(){
public String HtmlcallJava(){
return "JS調用Android的JAVA方法";
}

public String HtmlcallJava2(final String param){
return "JS帶參調用Android的JAVA方法" + param;
}

public void JavacallHtml(){
runOnUiThread(new Runnable() {
@Override
public void run() {
mWebView.loadUrl("javascript: showFromHtml()");
}
});
}

public void JavacallHtml2(){
runOnUiThread(new Runnable() {
@Override
public void run() {
mWebView.loadUrl("javascript: showFromHtml2('歡迎!')");
}
});
}
};
return Obj;
}

具體細節請下載文中一開始所附的鏈接,具體就不詳細講了,附幾張效果圖結束本文








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章