阅读更多

在Android的开发过程中、遇到一个新需求、那就是让Java代码和Javascript代码进行交互、在IOS中实现起来很麻烦、而在Android中相对来说容易多了、Android对这种交互进行了很好的封装、我们可以很简单的用Java代码调用WebView中的js函数、也可以用WebView中的js来调用Android应用中的Java代码。

案例主要包含了:

  1. Html中调用Android方法
  2. Android调用JS方法无参数
  3. Android调用JS方法有参数
  4. Android调用JS方法有参数且有返回值处理方式1
  5. Android调用JS方法有参数且有返回值处理方式2(Android4.4以上)

1:创建JS对象

 

webView.addJavascriptInterface(new JsInterface(), "obj");

 

public class JsInterface {    //JS中调用Android中的方法 和返回值处理的一种方法            /****          * Html中的点击事件 onclick      *        * @param toast      */    @JavascriptInterface    public void showToast(String toast) {      Toast.makeText(MainActivity.this, "你的商品价格是:¥"+toast, Toast.LENGTH_SHORT).show();    }}

 

function showToast(toast) {     var money=toast*3;    javascript:obj.showToast(money);}



2:

 

webView.loadUrl("javascript:funFromjs()");

 

function funFromjs(){    document.getElementById("helloweb").innerHTML="div显示数据,无参数";}



3:

 

webView.loadUrl("javascript:funJs('Android端传入的信息,div标签中显示,含参数')

 

 

function funJs(msg){   document.getElementById("hello2").innerHTML=msg;}



4:

 

webView.loadUrl("javascript:sum(6,6)");

 

/*** * Android代码调用获取J是中的返回值 *  * @param result*/   @JavascriptInterface   public void onSum(int result) {     Toast.makeText(MainActivity.this, "Android调用JS方法且有返回值+计算结果=="+result, Toast.LENGTH_SHORT).show();   } 

 

function sum(i,m){     var result = i*m;     document.getElementById("h").innerHTML= "Android调用JS方法且有返回值--计算结果="+result;     javascript:obj.onSum(result) } 



 

5:

 

 webView.evaluateJavascript("sumn(6,11)", new ValueCallback() {         @Override     public void onReceiveValue(String value) {         Toast.makeText(MainActivity.this, "返回值"+value, Toast.LENGTH_SHORT).show();           }});

 

function sumn(i,m){      var result = i*m;      document.getElementById("hh").innerHTML= "Android调用JS方法且有返回值--计算结果="+result;      return result;} 

 

注意:

1、Java 调用 js 里面的函数、效率并不是很高、估计要200ms左右吧、做交互性很强的事情、这种速度很难让人接受、而js去调Java的方法、速度很快、50ms左右、所以尽量用js调用Java方法

2、Java 调用 js 的函数、没有返回值、调用了就控制不到了

3、Js 调用 Java 的方法、返回值如果是字符串、你会发现这个字符串是 native 的、转成 locale 的才能正常使用、使用 toLocaleString() 函数就可以了、不过这个函数的速度并不快、转化的字符串如果很多、将会很耗费时间

4、网页中尽量不要使用jQuery、执行起来需要5-6秒、最好使用原生的js写业务脚本、以提升加载速度、改善用户体验。

 

注:使用的是本地的Html文件,不过在网络链接的Html文件也是可以实现的。

源码点击下载

 

 

更多相关文章

  1. C语言函数以及函数的使用
  2. android SDK更新方法总结
  3. Android基础之相关参数区别
  4. android设置Activity背景色为透明的2种方法
  5. android中设置分隔线几种方法
  6. android 使用DigestUtilsmd5加密的方法
  7. android 参数含义
  8. Android getWindow().setFlags方法与SD卡权限
  9. android 浏览器怎么支持 window.close() 和window.opener.locati

随机推荐

  1. 百度SDK定位
  2. Timer的使用
  3. Android(安卓)获取网络流量信息
  4. android 4中文件操作
  5. Android漏洞
  6. Android调用系统camera
  7. Android(安卓)Studio Unknown host ‘dow
  8. 横、竖分割线
  9. 监测Android(安卓)2G CMCC Signal Streng
  10. ADROID2.2系统多国语言定制