Android和javascript相互调用2

来源:互联网 发布:vb中通用对话框 编辑:程序博客网 时间:2024/05/16 09:47
package com.maiyu.jsdiaoyong;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.webkit.JavascriptInterface;import android.webkit.WebView;import android.webkit.WebViewClient;/** * *   @JavascriptInterface  必须添加js反射机制 */public class Main2Activity extends Activity {    private WebView webView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main2);        //加载页面        webView = (WebView) findViewById(R.id.webView2);        //允许JavaScript执行        webView.getSettings().setJavaScriptEnabled(true);        webView.setWebViewClient(new MyWebViewClient());        //找到Html文件,也可以用网络上的文件        webView.loadUrl("file:/android_asset/index2.html");        // 添加一个对象, 让JS可以访问该对象的方法, 该对象中可以调用JS中的方法        webView.addJavascriptInterface(new Contact(), "contact");    }    private final class Contact {        //JavaScript调用此方法拨打电话        @JavascriptInterface        public void call(String phone) {            Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + phone));            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);            startActivity(intent);        }        //Html调用此方法传递数据        @JavascriptInterface        public void showcontacts() {            //必须另开线程进行JS方法调用(否则无法调用)            webView.post(new Runnable() {                @Override                public void run() {                    String json = "[{\"name\":\"zxx\",\"amount\":\"9999999\",\"phone\":\"18600012345\"}]";                    // 注意调用的JS方法名要对应上                    // 调用JS中的方法                    webView.loadUrl("javascript:show('" + json + "')");                }            });        }    }    /**     * webviewb必须实现的方法 ,解决     */    private class MyWebViewClient extends WebViewClient {        @Override        public boolean shouldOverrideUrlLoading(WebView view, String url) {            if (url.startsWith("tel:")) {                //打电话                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));                startActivity(intent);            } else if (url.startsWith("http:") || url.startsWith("https:")) {                view.loadUrl(url);            }            return true;        }    }}

HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script type="text/javascript">            function show(jsondata){                    var jsonobjs = eval(jsondata);                    var table = document.getElementById("personTable");                    for(var y=0; y<jsonobjs.length; 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 = "<a href='javascript:contact.call(\""+ jsonobjs[y].phone+ "\")'>"+ jsonobjs[y].phone+ "</a>";                    }            }        </script></head><body onload="javascript:contact.showcontacts()"><table border="0" width="100%" id="personTable" cellspacing="0"> <tr>  <td width="30%">姓名</td>  <td width="30%" align="center">存款</td>  <td align="center">电话</td> </tr></table></body></html>
原创粉丝点击