android与h5之间的互调

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ming_ruo_xiao_xi/article/details/75378649

android与h5之间的互调

最近android项目中用到了与html之间的交互,总结了一下,还是比较全的,主要有
java调用js函数,js调用java函数,浏览器中通过链接打开app

- Android和H5互调-java调用js

private void initWebView() {
    WebSettings webSettings = webView.getSettings();
    //设置支持javaScript脚步语言
    webSettings.setJavaScriptEnabled(true);

    //支持双击-前提是页面要支持才显示
    webSettings.setUseWideViewPort(true);

    //支持缩放按钮-前提是页面要支持才显示
    webSettings.setBuiltInZoomControls(true);

    //设置客户端-不跳转到默认浏览器中
    webView.setWebViewClient(new WebViewClient());

    //加载网络资源
   // webView.loadUrl("http://atguigu.com/teacher.shtml");
    //加载本地资源
    webView.loadUrl("file:///android_asset/index.html");
    setContentView(webView);
}

本地文件位置如图所示
这里写图片描述

/**
* Java调用javaScript
* @param numebr
*/
private void login(String numebr) {

webView.loadUrl("javascript:javaCallJs("+"'"+numebr+"'"+")");
setContentView(webView);

}
html 中javascript
这里写图片描述
代码如下:

function javaCallJs(){
     document.getElementById("content").innerHTML +=   
         "<br\>java调用了js无参函数";
}

function javaCallJs(arg){
     document.getElementById("content").innerHTML =
         ("欢迎:"+arg );
         }

- Android和H5互调-JavaScript调java

1_配置Javascript接口

//设置支持js调用java
webView.addJavascriptInterface(new AndroidAndJSInterface(),"Android");//此处"Android"字符串要与下面的onclick中"window.Android.showToast()"的Android字符串保持一致

2_实现Javascript接口类

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

html代码:
这里写图片描述

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

当点击webview内嵌网页时该按钮时,就可以调用java中的showToast函数了,

当然showToast函数也可以携带参数:

<input type="button" value="点击Android被调用" onclick="window.Android.showToast('JS中传来的参数')" class="ButtonInput"/>


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

- Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据

1_首先在编写一个简单的html页面

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>title</title>
    </head>
    <body>
        <a href="mame1://name2/">打开app</a>
    </body>
</html>

2_在Android本地app的配置

在AndroidManifest的清单文件里的intent-filte中加入如下元素:
name1与name2要对应相同
这里写图片描述
代码如下:

 <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data
                android:host="name2"
                android:scheme="name1"/>
        </intent-filter>

3_如何通过这个方法获取网页带过来的数据
传数据的方式

 <a href="mame1://mame2/?arg0=0&arg1=1">打开app</a><br/>

(1).通过浏览器打开这个网页的,那么获取数据的方式为:

Uri uri = getIntent().getData();  
String test1= uri.getQueryParameter("arg0");
String test2= uri.getQueryParameter("arg1");

(2)如果使用webview访问该网页,获取数据的操作为:
复制代码

webView.setWebViewClient(new WebViewClient(){
  @Override
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
      Uri uri=Uri.parse(url);
          if(uri.getScheme().equals("name1")&&uri.getHost().equals("name2")){
              String arg0=uri.getQueryParameter("arg0");
              String arg1=uri.getQueryParameter("arg1");
          }else{
              view.loadUrl(url);
          }
      return true;
  }
});

猜你喜欢

转载自blog.csdn.net/ming_ruo_xiao_xi/article/details/75378649