android 本地方法与js交互

使用的第三方框架    这里要介绍2种交互的方式
com.github.lzyzsd.jsbridge.BridgeWebView
Android本地的初始化设置
webView = (BridgeWebView) view.findViewById(R.id.webView);
        webView.setDefaultHandler(new DefaultHandler());
        webView.loadUrl("file:///android_asset/echarts/map.html");
支持javascript
        webView.getSettings().setJavaScriptEnabled(true);
 设置可以支持缩放
        webView.getSettings().setSupportZoom(true);
// 设置出现缩放工具
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setDisplayZoomControls(false);
//扩大比例的缩放
//        webView.getSettings().setUseWideViewPort(true);
自适应屏幕
        webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
        webView.getSettings().setLoadWithOverviewMode(true);
//        webView.setInitialScale(100);
        webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        //设置本地调用对象及其接口
        webView.addJavascriptInterface(new JavaScriptObject(mContext), "myObj");//第二种jsjava交互

        jiaohuMap();//第一种jsjava交互,只限于在.html文件中使用


	第一种jsjava交互,只限于在.html文件中使用
	private void jiaohuMap() {
        webView.callHandler("MAP", mParam, new CallBackFunction() {
            @Override
            public void onCallBack(String data) {
//                Log.d("TAG_3",data);
            }
        });
    }
在.html文件中加入
<script>
          function connectWebViewJavascriptBridge(callback) {
      if (window.WebViewJavascriptBridge) {
      callback(WebViewJavascriptBridge)
      } else {
      document.addEventListener(
      'WebViewJavascriptBridgeReady'
      , function() {
      callback(WebViewJavascriptBridge)
      },
      false
      );
      }
      }

      connectWebViewJavascriptBridge(function(bridge) {
      bridge.init(function(message, responseCallback) {
      console.log('JS got a message', message);
      var data = {
      'Javascript Responds': 'Wee!'
      };
      console.log('JS responding with', data);
      responseCallback(data);
      });

      //这里就是Js注册的functionInJs方法,data即为原生带来的参数
      bridge.registerHandler("MAP", function(data, responseCallback) {
      //将原生带来的参数,显示在show标签位置

       var responseJSON=eval('('+data+')');//这里必须要加上eval('('+data+')')来解析data

      
      var data = [];
      for(var i in responseJSON){ 
         data.push({name:responseJSON[i].GEO_ID,ONCE:responseJSON[i].ONCE,value:responseJSON[i].RATE,ONCEUNFIN:responseJSON[i].ONCEUNFIN,ONCEALARM:responseJSON[i].ONCEALARM,ALARMUNFIN:responseJSON[i].ALARMUNFIN,ALARMRATE:responseJSON[i].ALARMRATE})
         <!--data.push({name:responseJSON[i].NGEOID,value:responseJSON[i].BASEBI,value2:responseJSON[i].ONCE})//原来的-->

      }
      console.log(data);
      on(data);
//调用responseCallback方法可以带传参数到原生
      <!--responseCallback(responseJSON);-->
      });
      })

          </script>

第二种JS交互非常好用在代码中设置
//设置本地调用对象及其接口
        webView.addJavascriptInterface(new JavaScriptObject(mContext), "myObj");
新建类
public class JavaScriptObject {
    Context mContxt;

    public JavaScriptObject(Context mContxt) {
        this.mContxt = mContxt;
    }
    @JavascriptInterface //这个注释一定要加,否则无效
    public void fun1FromAndroid(String name) {
        Toast.makeText(mContxt, name, Toast.LENGTH_SHORT).show();
    }
    @JavascriptInterface//api16以后需要在调用的本地方法上加注解@JavascriptInterface
    public void fun2(String name) {
        Toast.makeText(mContxt, "fun2:" + name, Toast.LENGTH_SHORT).show();
    }
}
然后在.html.js文件中都可以进行交互,只需加一句
myObj.fun1FromAndroid("aaaaaaaa");




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值