uniapp调安卓原生功能实现蓝牙通信

1,466 阅读4分钟

uniapp开发的APP要接入三方厂商SDK功能,通过蓝牙连接控制手持设备。

image.png

我采用uniapp调用原生aar包接口的方式。

aar包源码 gitee.com/rootegg/202…

image.png

方式一是调用uni接口

我们看官网是有提供API uniapp.dcloud.net.cn/api/system/…

使用例子很多,如blog.csdn.net/weixin_4710…

**初始化蓝牙设备 | | 提醒用户打开蓝牙设备**
uni.openBluetoothAdapter

**搜索周边设备**
uni.startBluetoothDevicesDiscovery

**获取搜索到的设备信息**
uni.getBluetoothDevices

**当用户点击某个设备时将deviceId进行蓝牙连接**
uni.createBLEConnection

**连接上需要的蓝牙设备之后,获取这个蓝牙设备的服务uuid**
uni.getBLEDeviceServices

**如果一个蓝牙设备需要进行数据的写入以及数据传输,就必须具有某些特征值,所以通过上面步骤获取的id可以查看当前蓝牙设备的特征值**
uni.getBLEDeviceCharacteristics

**将从后台服务获取的指令写入到蓝牙设备当中**
uni.writeBLECharacteristicValue

**创建链接,发送指令启用notify 功能接收设备返回的数据**
uni.notifyBLECharacteristicValueChange

方式二调用aar包

在uniapp官网有讲开发原生SDK插件,在uniapp项目中调用插件功能,nativesupport.dcloud.net.cn/NativePlugi…

过程是:

  • 制作Android原生代码插件后导出aar包
  • 将aar包放到uniapp项目根目录nativeplugins中,配置插件相关文件
  • 在页面中调用uni.requireNativePlugin获取插件抛出的api接口
  • 生成基座应用可以用于本地调试和云打包正式版

第一步制作原生插件aar包

我安卓导出aar项目源码:gitee.com/rootegg/202…

在官网中有个模板项目,按照官网指导开发即可

nativesupport.dcloud.net.cn/AppDocs/dow…

image.png

image.png

开发插件都在 UniPlugin-Hello-AS 项目中,如果是开发界面组件那用uniplugin_component,如果是无界面API用uniplugin_module,可以参考例子uniplugin_richalert

Android Studio 是2024年最新版,安装环境可以看上一篇一次接手远古Android项目终于运行起来了在Gradle中执行assembleRelease导出aar发布版即可

image.png

我这个API导出插件关键在两点:

  • 继承 UniModule

  • 函数头增加 UniJSMethod

  • 函数参数 UniJSCallback 接收js页面回调传参

image.png

第二步uniapp项目添加插件

uniapp前端源码: gitee.com/rootegg/202…

在uniapp项目中添加nativeplugins,把上面的aar包放到android文件夹下即可不管名字,增加package.json配置文件

image.png

项目配置蓝牙模块,点击 manifest.jsonApp模块权限勾选Bluetooth

image.png

App原生插件配置找到本地插件选进来,这样后面代码中才能使用这个插件

image.png

根据实际情况修改 minSdkVersion,uniapp默认是最低版本用21,但是我安卓项目最低版本设置的23,所以这里也需要修改成23,不然打包失败的

image.png

基础配置中设置应用版本名称和应用版本号,注意每次生成基座应用都需要修改这两个版本号。什么是基座应用呢,因为uniapp写的代码本质上还是js代码,基座应用就是原生app框架,所以如果修改原生插件代码都需要重新制作基座应用,在Hbuilder顶部运行中可以制作自定义调试基座

image.png

第三步调用原生aar包导出的函数

在我们vue页面中 uni.requireNativePlugin 初始化使用上面插件package.json中定义的唯一id,后面如调用 connectBt 接口,通常会传入一个 UniJSCallback 参数提供回调

image.png

第四步制作基座自定义调试基座和发布

采用云端证书,直接打包即可,等待几分钟完成

注意每次如果修改过原生插件代码,都需要重新制作基座,并且要修改上面两个地方的版本号

image.png

image.png

基座制作成功后,下面会有提示,因为Hbuilder是免费打包,会有次数限制,可以看开发者控制台 dev.dcloud.net.cn/pages/app/l…

基座完成后,就可以数据线插上电脑,手机开始真机调试

image.png

选择自己手机,选基座运行

image.png

或者发行发布apk文件即可

image.png

如果不想等在线打包,可以离线打包

我用 Android Studio 2024 打开 HBuilder-Integrate-AS 项目

image.png

刚打开报错 Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module @32960950 切换JDK版本到 1.8

image.png

如果之前没有安装JDK1.8,可以点这里 Downlid JDK选择1.8下载,再重新Rebuild

image.png

在Hbuilder中生成本地资源,获得js文件这些,并将生成目录__UNI__F9659A9 放入 HBuilder-Integrate-AS\simpleDemo\src\main\assets\apps中,删除原来的 __UNI_A

image.png

离线打包可以参考 www.bilibili.com/video/BV1hu…