栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

uniapp H5与原生安卓的数据互通和方法调用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

uniapp H5与原生安卓的数据互通和方法调用

1、准备

我这里是uniapp与原生安卓之间的相互调用,也就是原生安卓内嵌H5页面,下面先来准备一下安卓端的代码。
(1)、初始化的MainActivity 类定义一个 WebView

private WebView webView;

(2)、初始化的方法onCreate 设置 WebView 的参数及各种设置,这里主要是开启js 的调用 和添加H5调用的类,相当于在项目启动的时候就加载H5需要调用的类。

 @Override
    @SuppressLint("JavascriptInterface")
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ConTEXT = this.getbaseContext();

			 // H5调用的类,deviceInfo  是给类取得别名,调用的时候用到
        webView.addJavascriptInterface(new DeviceInfo(), "deviceInfo");
        
       // 添加js支持
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavascriptEnabled(true);
    }

(3)、H5调用的类,

public class DeviceInfo {
				// H5调用的方法,这里的方法可以自己定义,和java的写法一样。
        @JavascriptInterface
        public String getDeviceId() {
            //获取手机的Serial码
            String deviceId = Build.SERIAL;
            return deviceId;
        }

        @JavascriptInterface
        public String getDeviceInfo() {
            //获取手机的Serial码
            String serialNumber = Build.SERIAL;
            String deviceType = Build.DEVICE;
            String deviceName = Build.PRODUCT;
            Map map = new HashMap<>();
            map.put("serialNumber",serialNumber);
            map.put("deviceType",deviceType);
            map.put("deviceName",deviceName);
            String toJson = new Gson().toJson(map);
            return toJson;
        }
    }

这样前期的准备就做好了,当然原生安卓项目的创建这些我这里的就不讲了。

2、H5调原生安卓 1、H5代码

我这里是用uniapp写的H5页面,在 methods 模块 的方法里面,需要调原生安卓的地方:

let  deviceId = window.deviceInfo.getDeviceId();

注意: window 是固定写法,deviceInfo 上面的取得类别名,getDeviceId 就是我们需要调的这个类里面的方法名了,这里我没有传参数,需要传参的直接加上实参参数就可以了,对应的方法也加上形参就可以了。

  // H5调用的类,deviceInfo  是给类取得别名,调用的时候用到
        webView.addJavascriptInterface(new DeviceInfo(), "deviceInfo");
2、原生安卓代码

这里就是上面写的代码,这里需要讲的就是需要返回参数到H5的直接 return 回去就可以了。

public class DeviceInfo {
        @JavascriptInterface
        public String getDeviceId() {
            //获取手机的Serial码
            String deviceId = Build.SERIAL;
            return deviceId;
        }

        @JavascriptInterface
        public String getDeviceInfo() {
            //获取手机的Serial码
            String serialNumber = Build.SERIAL;
            String deviceType = Build.DEVICE;
            String deviceName = Build.PRODUCT;
            Map map = new HashMap<>();
            map.put("serialNumber",serialNumber);
            map.put("deviceType",deviceType);
            map.put("deviceName",deviceName);
            String toJson = new Gson().toJson(map);
            return toJson;
        }
    }
3、原生安卓调H5方法

这里我也网上找了很久,都是原生的H5 js 写法,因为我是用uniapp写的,所以和原生js写法不一样,这重点讲一下,我踩了一个大坑。
(1)原生安卓代码。
首先讲一下安卓端的代码,其实很简单。

// initializeData 为H5的方法,也就是uniapp的方法, payStatus 为需要传的参数。 
webView.loadUrl("javascript:initializeData(" + payStatus + ")");

安卓端代码就完了,就这么简单,和网上找的帖子一样,都是这么调的,但是当时不知道的是,H5的方法怎么写。
(2)uniapp H5 的方法。
我的写法:在 mounted模块

mounted: function() {
			// window 这应该是固定写法,initializeData  为原生安卓端调用的方法。
			window.initializeData =function (e) {
				// e为传回来的参数
				// 自己的业务逻辑处理
			}
		},

刚刚在网上看到了一种写法,应该也可以的

created() {
      window.getResult = this.getResult //注册到windows  调完原生方法之后 走h5的方法
},
methods: {
      getResult(res){
      //调用完成原生方法后,会走到这个方法
      }
}

好了,这就是原生安卓与uinapp H5的参数和方法的相互调用的全部过程。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/703961.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号