Android Native与JS通信互调

写在最前:

看Android最新技术总结,关注公众号:


         最近因为App与H5交互逻辑太乱,所以抽空梳理了下;对目前App与H5的各种交互通信做个总结,自取适合自己的交互方式。

一、H5调用原生的native方法


1、拦截shouldOverrideUrlLoading方法

         借助WebView在加载一个url的时候都会调用WebViewClient类的shouldOverrideUrlLoading(WebView view, String url)方法这一特性,我们可以针对参数的url定义好特殊的schema协议,来调用native提供的不同的逻辑;首先我们需要为WebView设置WebViewClient对象;接着重写shouldOverrideUrlLoading(WebView view, String url)方法;

        这里先说明下App的schema,我们需要针对我们app定义一套自己的schema规范;schema指就是与H5约束好的字符串。h5在调用native方法的时候,需要以约束好的schema为协议,调用native方法。比如 nativeApp://xxxPath?xxxParam=yyy; 其中:nativeApp字符串指schame协议名称,每个App自己取就可以,我们只拦截该协议下的url请求,其他的可以不处理;xxxPath指关键路径,对应自己的native功能,比如nativeApp://login 表示调用本地登录界面等等;xxxParam=yyy,表示传递的参数,比如nativeApp://login?name=wang;

2、拦截alert、prompt、confirm处理方法

       该方式与上面的拦截处理类似,只是针对H5拦截的地方不同;H5端在调用window.alert("nativeApp://login?name=wang")时,会调用WebChromeClient类的onJsAlert方法,我们在该方法中处理schema,调用native方法;

上面的实现是以alert拦截为实例,其他的prompt、confirm完全也可以,一般与H5端约束好就可以


3、addJavascriptInterface注册Android对象供H5调用

      通过调用webView.addJavascriptInterface(对象实例, "对象名称")方法,注册一个Android对象到H5端;注册到H5的对象的方法需要添加@JavascriptInterface 注解,这样H5端才能正常调用;

H5端使用方式:window.appObject.alert(“我是H5来的提示”)就可以调用到native的方法

二、Android native端调用H5端方法

       Android native目前通过WebView.loadUrl("javascript:方法名('参数')")来调用H5的方法;如H5有如下方法:

window.showCity = function(city){

   console.log("我是Native传递来的城市:"+city)

}

Android调用:

 mWebView.loadUrl(“javascript:window.showCity('北京')”);

在Android版本大于4.4(SDK19)时,可以使用evaluateJavascript(js,callBack)来调用H5端方法;如下:onReceiveValue(String value)的参数value是js方法的返回值;

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 166,828评论 24 703
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 11,350评论 2 56
  • 前言 总结 Android WebView 常用的相关知识点,令包含以下干货内容分析:Js注入漏洞、WebView...
    無名小子的杂货铺阅读 68,748评论 17 169
  • 转载:https://blog.csdn.net/carson_ho/article/details/649046...
    随心随性_0a25阅读 1,968评论 0 10
  • 1. 什么是 CSS hack 由于不同厂商的浏览器,比如Internet Explorer,Safari,Mo...
    冰滩波纹阅读 147评论 0 0
  • 你有没有经常在发表看法及回答问题时脑子一篇空白?如果有,那你就跟我一样缺乏主动思考的能力,那如果我想思考表达,又该...
    programmer阅读 430评论 1 2
  • 道德经是字字玑珠,老子在道德经第四章用短短的40个字就把宇宙的起源说的清清楚楚,可以反复参读。 道冲而用之,或...
    你的超人不会飞阅读 96评论 0 0
  • 描述 找到两个数字使得他们和最接近target,返回最接近值 样例 nums =[-1, 2, 1, -4],ta...
    6默默Welsh阅读 287评论 0 0
  • 今天玩得真开心,感谢好友母子俩。 就是一时兴起,我们到南湖公园的游乐场。孩子跟我都是那种不会玩的人,胆子又小,有的...
    木棉之秋阅读 353评论 2 5