首页 > 其他分享 >uniapp H5与原生安卓的数据互通和方法调用

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

时间:2022-09-21 17:44:06浏览次数:91  
标签:原生 uniapp 调用 String map 安卓 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<String,String> 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<String,String> 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的参数和方法的相互调用的全部过程
uniapp H5与原生安卓的数据互通和方法调用

标签:原生,uniapp,调用,String,map,安卓,H5
From: https://www.cnblogs.com/sishuiliuyun/p/16716494.html

相关文章

  • uniapp未添加本地push模块
    1.引入push模块所需的jar/aar文件本地push模块需要这个文件:aps-release.aar,在SDK/libs目录下找到这个文件后复制到android\simpleDemo\libs目录下获取途径:下载androidsd......
  • 在UniApp的H5项目中,生成二维码和扫描二维码的操作处理
    在我们基于UniApp的H5项目中,需要生成一些二维码进行展示,另外也需要让用户可以扫码进行一定的快捷操作,本篇随笔介绍一下二维码的生成处理和基于H5的扫码进行操作。二维码的......
  • h5移动端识别二维码信息
    jsqr插件图片跨域时不允许绘制到canvas,所以先转blob在画到canvas上面就可以,如果不跨域直接画就行functiongetImageBlob(url){          varxh......
  • 01 uniapp/微信小程序 项目day01
    一.起步1.1配置uni-app开发环境什么是uni-app,就是基于vue的一个开发框架,可以将我们写的一套代码,同时发布到ios、安卓、小程序等多个平台官方推荐使用Hbuilderx来写uni......
  • 基于HBuilderX+UniApp+ThorUI的手机端前端的页面组件化开发经验
    现在的很多程序应用,基本上都是需要多端覆盖,因此基于一个WebAPI的后端接口,来构建多端应用,如微信、H5、APP、WInForm、BS的Web管理端等都是常见的应用。本篇随笔继续分析总......
  • ES6的H5相关内容
    画图:canvas--签名,刮奖,画布线:坐标,粗细,颜色.lineWidth=6;//线的粗细,单位是px.strokeStyle="css颜色值";.moveTo(x,y),开始落笔位置.lineTo(x,y),结束位置.stroke();绘制线......
  • h5页面打开微信小程序
    微信终于支持由页面跳转至小程序啦~步骤一:绑定域名登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。步骤二:引入JS文件在需要调用......
  • uniapp生成二维码
    uniapp—H5生成二维码操作<template> <viewclass='pages'> <!--二维码--> <viewclass="qr-box"> <canvascanvas-id="qrcode"v-show="qrShow"/> </vi......
  • uniapp单选全选
    <view>      <viewclass="cssss"v-for="(item,index)inhondianCss":key="index">        <viewclass="hondian":class="item.shows?......
  • uniapp蓝牙多设备连接
    博客园断更快一年了终于想起来我还有个博客,也主要是最近工作上面也没有什么想记录的,不过最近倒是搞了个有意思的功能项目 请注意:此文章禁止转载,抄袭,这是对我个人知识产......