Android和JavaScript互相調用
Html頁面和Java代碼結合的方式一般用在介面經常被更改 的情況下,可以講html放在網路中,軟體一開啟就會訪問網路擷取到最新的介面。缺點是會受到網路訊號的影響,從而導致訪問速度慢。
1.用WebView來顯示HTML代碼
2.允許WebView執行JavaScript
webView.getSettings().setJavaScriptEnabled(true);
3.擷取到HTML檔案,也可從網路中擷取
webView.loadUrl(file:///android_asset/index.html); //HTML檔案存放在assets檔案夾中
4.添加一個對象, 讓JS可以訪問該對象的方法, 該對象中也可以調用JS中的方法
webView.addJavascriptInterface(new Contact(), contact);
完整範例程式碼如下:
:
MainActivity
[java]
- import android.app.Activity;
- import android.content.Intent;
- import android.net.Uri;
- import android.os.Bundle;
- import android.webkit.WebView;
-
- public class MainActivity extends Activity {
- private WebView webView;
-
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- //載入頁面
- webView = (WebView) findViewById(R.id.webView);
- //允許JavaScript執行
- webView.getSettings().setJavaScriptEnabled(true);
- //找到Html檔案,也可以用網路上的檔案
- webView.loadUrl(file:///android_asset/index.html);
- // 添加一個對象, 讓JS可以訪問該對象的方法, 該對象中可以調用JS中的方法
- webView.addJavascriptInterface(new Contact(), contact);
- }
-
- private final class Contact {
- //JavaScript調用此方法撥打到電話
- public void call(String phone) {
- startActivity(new Intent(Intent.ACTION_CALL, Uri.parse(tel: + phone)));
- }
-
- //Html調用此方法傳遞資料
- public void showcontacts() {
- String json = [{ ame:zxx, amount:9999999, phone:8600012345}];
- // 調用JS中的方法
- webView.loadUrl(javascript:show(' + json + '));
- }
- }
- }
HTML:
[html] view plaincopy
-
-
-
-
-
- <script type=text/javascript>
- function show(jsondata){
- var jsonobjs = eval(jsondata);
- var table = document.getElementById(personTable);
- for(var y=0; y var tr = table.insertRow(table.rows.length);
- var td1 = tr.insertCell(0);
- var td2 = tr.insertCell(1);
- td2.align = center;
- var td3 = tr.insertCell(2);
- td3.align = center;
- td1.innerHTML = jsonobjs[y].name;
- td2.innerHTML = jsonobjs[y].amount;
- td3.innerHTML = + jsonobjs[y].phone+ ;
- }
- }
- </script>
-
-
-
-
-
-
-
-
-
-
撥打到電話需要添加許可權: