android与H5互相调用

简介: 市面上很多android软件都有内嵌H5的,主要是为了节约成本,提高开发效率,其实现原理主要是通过Java代码和JavaScript代码的互相调用来实现。 Java调用Js1,webview初始化:private void initWebView() { webView =...

市面上很多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();
    }
}

 

相关文章
|
6月前
|
Web App开发 移动开发 小程序
"项目中mpaas升级到10.2.3 适配Android 14之后 app中的H5以及小程序都访问不了,
"项目中mpaas升级到10.2.3 适配Android 14之后 app中的H5以及小程序都访问不了,显示“网络不给力,请稍后再试”,预发内网版本不能使用,线上版本可以正常使用,这个是什么原因啊,是某些参数没有配置吗,还是说是一些参数改错了?
105 2
|
6月前
|
移动开发 jenkins 持续交付
jenkins编译H5做的android端编译卫士app记录
jenkins编译H5做的android端编译卫士app记录
43 0
|
移动开发 Android开发
h5滑动底部兼容安卓
h5滑动底部兼容安卓
100 0
|
6月前
|
存储 移动开发 JavaScript
比较H5开发与安卓开发
比较H5开发与安卓开发
99 2
|
6月前
|
存储 移动开发 JavaScript
【原生】sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
【原生】sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
|
12月前
|
移动开发 小程序 Android开发
|
移动开发 Java Android开发
uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式
uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式
1742 0
uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式
|
JavaScript 前端开发 Android开发
JS(Javascript)调用Android原生方法三步走
JS(Javascript)调用Android原生方法三步走
577 0
|
Android开发
Android Studio中添加Flutter模板直接调用
Android Studio中添加Flutter模板直接调用
202 0
Android Studio中添加Flutter模板直接调用
|
Java 编译器 API
Android使用NDK(从java调用本地函数'JNI')
Android使用NDK(从java调用本地函数'JNI')
230 0
Android使用NDK(从java调用本地函数'JNI')