阅读更多

在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. android ethernet
  2. 深入理解 Android(安卓)Activity的生命周期
  3. Android(安卓)Handler机制13之AsyncTask源码解析
  4. Android(安卓)4.0 访问WebService 出现 android.os.NetworkOnMai
  5. Android窗口机制(四)ViewRootImpl与View和WindowManager
  6. Android基础之相关参数区别
  7. Android(安卓)Handler机制3之SystemClock类
  8. Cydia for Android
  9. android设置Activity背景色为透明的2种方法

随机推荐

  1. 2011.07.08(4)——— android Intent.creat
  2. Android(安卓)通过网络图片路径查看图片
  3. Android中ListActivity用法实例分析
  4. android 模拟 再按一次退出程序onKeyDown
  5. Android线程池(二)
  6. mtk平台android提速
  7. frame动画
  8. Android之Gallery和ImageSwitcher结合的
  9. android――activity添加退出动画
  10. Android 显示当前服务的代码片段