zoukankan      html  css  js  c++  java
  • android与H5互相调用

    市面上很多android软件都有内嵌H5的,主要是为了节约成本,提高开发效率,其实现原理主要是通过Java代码和JavaScript代码的互相调用来实现。

    Java调用Js

    1,webview初始化:

    private void initWebView() {
            webView = new WebView(this);
            WebSettings webSettings = webView.getSettings();
            //设置支持javaScript脚步语言
            webSettings.setJavaScriptEnabled(true);
    
            //支持双击-前提是页面要支持才显示
            webSettings.setUseWideViewPort(true);
    
            //支持缩放按钮-前提是页面要支持才显示
            webSettings.setBuiltInZoomControls(true);
    
            //设置客户端-不跳转到默认浏览器中
            webView.setWebViewClient(new WebViewClient());
    
            //加载网络资源
            webView.loadUrl("http://soyoungboy.com/teacher.shtml");
    //        webView.loadUrl("file:///android_asset/JavaAndJavaScriptCall.html");
    
            //显示页面
            setContentView(webView);
        }

    2,加载main目录创建assets并且加载本地资源

    webView.loadUrl("file:///android_asset/JavaAndJavaScriptCall.html");

    3,java调用调用javaScript

    /**
     * Java调用javaScript
     * @param numebr
     */
    private void login(String numebr) {
        webView.loadUrl("javascript:javaCallJs("+"'"+numebr+"'"+")");
        setContentView(webView);
    }

    注意下Html5代码,回去调用javaCallJs(arg)代码:

    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
        <script type="text/javascript">
    
        function javaCallJs(){
             document.getElementById("content").innerHTML +=   
                 "<br>java调用了js无参函数";
        }
        
        function javaCallJs(arg){
             document.getElementById("content").innerHTML =
                 ("欢迎:"+arg );
        }
        
        
       function showDialog(){
          alert("谷粉们你好,我是来自javascript");
       }
       
    
    
    
    
    
        </script>
    
    
    </head>
    
    
    <body>
    
    <div align="left" id="content"> 博客园</div>
    <div align="right">光临博客园</div>
    
    <p><img src="https://www.cnblogs.com/images/logo_small.gif"></p>
    
    
    <input type="button" value="点击Android被调用" onclick="window.Android.showToast()" />
    
    </body>
    
    
    </html>

    JavaScript调java

    1,配置javasript

     //设置支持js调用java
            webView.addJavascriptInterface(new AndroidAndJSInterface(),"Android");

    2,实现javaScript接口类

    /**
     * js可以调用该类的方法
     */
    class AndroidAndJSInterface{
            public void showToast(){
            Toast.makeText(JavaAndJSActivity.this, "我被js调用了",  Toast.LENGTH_SHORT).show();
        }
    }

    html5代码调用如上代码:

    <input type="button" value="点击Android被调用" onclick="window.Android.showToast()" />

    但是很有可能调用不起来,那么怎么处理呢?

    1. targetSdkVersion 修改为16

    2. 添加@JavascriptInterface注解,如下:
    /**
     * js可以调用该类的方法
     */
    class AndroidAndJSInterface{
        @JavascriptInterface
        public void showToast(){
            Toast.makeText(JavaAndJSActivity.this, "我被js调用了", Toast.LENGTH_SHORT).show();
        }
    }
  • 相关阅读:
    济南学习 Day2 T1 am
    济南学习 Day1 T2 pm
    济南学习 Day1 T3 am
    济南学习 Day 1 T2 am
    洛谷 P1209 修理牛棚== Codevs 2079 修理牛棚
    2016.10.30 济南学习 Day2 下午 T1
    餐厅随笔----2016.10.30 于济南 外出学习
    bzoj1671 [Usaco2005 Dec]Knights of Ni 骑士
    bzoj1088 [SCOI2005]扫雷Mine
    bzoj1655 [Usaco2006 Jan] Dollar Dayz 奶牛商店
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/6399730.html
Copyright © 2011-2022 走看看