android与h5之间的互调

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);
}

本地文件位置如图所示
android与h5之间的互调_第1张图片

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

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

}
html 中javascript
android与h5之间的互调_第2张图片
代码如下:

function javaCallJs(){
     document.getElementById("content").innerHTML +=   
         "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代码:
这里写图片描述


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

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




/**
     * 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页面


    
        
        title
    
    
        打开app
    

2_在Android本地app的配置

在AndroidManifest的清单文件里的intent-filte中加入如下元素:
name1与name2要对应相同
android与h5之间的互调_第3张图片
代码如下:

 
            
            
        
        
            
            
            
            
        

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

 打开app

(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;
  }
});

你可能感兴趣的:(android项目用到)