当时业务的需求是这样的,H5有一个活动商品列表的界面,IOS和Android共用这一个界面,点击商品可以跳转到Android原生的商品详情界面并传递商品ID;  大概就是点击H5界面携带参数跳转到Android原生界面

好了,需求已经分析完毕了,Android只需要获取H5的点击事件和传递的参数;

来,上代码:

/启用支持javascriptWebSettings settings = webView.getSettings();settings.setJavaScriptEnabled(true);

 

Android4.2以上需要@JavascriptInterface注解,其目的是为了安全;

 

public class JavaScriptObject{    public JavaScriptObject(Activity activity) {    }    @JavascriptInterface    public void setToken(String goodsId){        //goodsId就是商品的ID,这里拿到商品的ID后直接跳转到商品详情页,并把id传递过去    }    @JavascriptInterface    public void definedShare(String ShareJson){    }}

 

/**添加js接口,参数1是本地类名,参数2是标记;H5调用需要 "window.标记.类名中的方法名" 才能调用*/webView.addJavascriptInterface(new JavaScriptObject(this), "android");

到这里Android端需要写的就完成了;

这个是我截的图,可以看一下:

这里是H5需要写的代码:

    

调用原生setToken方法

 

----------------------------------------------------------------------------------------------------------------------------------

附:如果在Android端调用H5中的方法:

 /*  * Android调用H5中的方法  *///传固定字符串可以直接用单引号括起来 mWebView.loadUrl("javascript:alertMessage('哈哈')");//访问H5里带参数的方法,alertMessage(message)为H5里的方法 //当出入变量名时,需要用转义符隔开 String content="1016"; mWebView.loadUrl("javascript:alertMessage(\""   +content+   "\")"   );  //Android调用有返回值js方法,安卓4.4以上才能用这个方法 mWebView.evaluateJavascript("11", new ValueCallback() {     @Override     public void onReceiveValue(String value) {         Log.i(TAG, "js返回的结果为=" + value);     } });

 

抽成方法:

 

 private void callJS(String callback, String status) {        if (TextUtils.isEmpty(status)) {            if (AndroidUtils.isKitkat()) {                mWebView.evaluateJavascript("javascript:" + callback + "()", null);            } else {                mWebView.loadUrl("javascript:" + callback + "()");            }        } else {            if (AndroidUtils.isKitkat()) {                mWebView.evaluateJavascript("javascript:" + callback + "('" + status + "')", null);            } else {                mWebView.loadUrl("javascript:" + callback + "('" + status + "')");            }        }    }public static boolean isKitkat() {        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;    }

 

更多相关文章

  1. Android(安卓)& Vibrator
  2. Unity—Android通讯
  3. Android(安卓)获取WIFI MAC地址的方法
  4. Android键盘自适应方法.
  5. Android常用资源总结
  6. Android(安卓)Handler机制8之消息的取出与消息的其他操作
  7. [Android][设置最小(大)宽高]
  8. android中activity全屏的方法
  9. Android(安卓)PinnedHeaderListView 详解

随机推荐

  1. 读《第一行代码 第3版》第1章知识点简单
  2. Android使用webrtc实现检测用户是否在说
  3. apk安装 手机没sd卡安装失败解决方案
  4. Android(安卓)的HashMap介绍
  5. Android学习开发路线图
  6. Android 广播接收器注册与注销源码分析
  7. Android插件开发初探——分析篇
  8. Android Studio 单元测试
  9. android wifi 连接笔记
  10. Android学习笔记(38):Handler消息传递处