android与h5之间的互调

来源:互联网 发布:淘宝运营工资高吗 编辑:程序博客网 时间:2024/06/05 06:27

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调用javawebView.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;  }});
原创粉丝点击