前言:UNI-APP是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。即使你不需要发布到那么多的平台,UNI-APP也是一个不错的微信小程序的开发框架
UNI-APP的官网
了解蓝牙API返回的报错
错误码 | 错误信息 | 说明 |
---|---|---|
0 | ok | 正常 |
10000 | not init | 未初始化蓝牙适配器 |
10001 | not available | 当前蓝牙适配器不可用 |
10002 | no device | 没有找到指定设备 |
10003 | connection fail | 连接失败 |
10004 | no service | 没有找到指定服务 |
10005 | no characteristic | 没有找到指定特征值 |
10006 | no connection | 当前连接已断开 |
10007 | property not support | 当前特征值不支持此操作 |
10008 | system error | 其余所有系统上报的异常 |
10009 | system not support | Android 系统特有,系统版本低于 4.3 不支持 BLE |
10012 | operate time out | 连接超时 |
10013 | invalid_data | 连接 deviceId 为空或者是格式不正确 |
初始化蓝牙模块
uni.openBluetoothAdapter(OBJECT)
- 其他蓝牙相关 API 必须在这个方法调用之后使用。否则 API 会返回错误(errCode=10000)。
- 在用户蓝牙开关未开启或者手机不支持蓝牙功能的情况下,调用这个方法会返回错误(errCode=10001),表示手机蓝牙功能不可用。
- 初始化完成后,可通过
uni.onBluetoothAdapterStateChange
监听手机蓝牙状态的改变,也可以调用蓝牙模块的所有API。
示例代码
uni.openBluetoothAdapter({
success: (res) => {
if (res.errMsg == 'openBluetoothAdapter:ok') {
}
}
})
监听蓝牙状态变化事件
uni.onBluetoothAdapterStateChange(CALLBACK)
CALLBACK 返回参数
属性 | 类型 | 说明 |
---|---|---|
available | boolean | 蓝牙适配器是否可用 |
discovering | boolean | 蓝牙适配器是否处于搜索状态 |
示例代码
uni.onBLEConnectionStateChange((res) => {
if (res.connected == false) {
this.cut = true
uni.showModal({
title: "蓝牙连接断开",
content: "是否重新搜索",
success: (res) => {
if (res.confirm) this.search()
}
})
}
})
搜索周围的蓝牙
uni.startBluetoothDevicesDiscovery(OBJECT)
- App 端目前仅支持发现ble蓝牙设备
- 开始搜寻附近的蓝牙外围设备。此操作比较耗费系统资源,请在搜索并连接到设备后调用
uni.stopBluetoothDevicesDiscovery
方法停止搜索。
OBJECT 参数说明
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
services | Array | 否 | 要搜索但蓝牙设备主 service 的 uuid 列表。某些蓝牙设备会广播自己的主 service 的 uuid。如果设置此参数,则只搜索广播包有对应 uuid 的主服务的蓝牙设备。建议主要通过该参数过滤掉周边不需要处理的其他蓝牙设备。 | |
allowDuplicatesKey | boolean | false | 否 | 是否允许重复上报同一设备。如果允许重复上报,则 uni.onBlueToothDeviceFound 方法会多次上报同一设备,但是 RSSI 值会有不同。 |
interval | number | 0 | 否 | 上报设备的间隔。0 表示找到新设备立即上报,其他数值根据传入的间隔上报。 |
success | function | 否 | 接口调用成功的回调函数 | |
fail | function | 否 | 接口调用失败的回调函数 | |
complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
示例代码
uni.startBluetoothDevicesDiscovery({
allowDuplicatesKey: true, //是否允许重复上报同一设备
interval: 0, //搜索间隔
success: (res2) => {
if (res2.errMsg == 'startBluetoothDevicesDiscovery:ok') {
this.monitor()
}
}