更新记录
1.0.2(2024-11-20)
(注:不同hx版本最好重新打包基座,以避免出现版本差异的错误)
- 【新增】closeNotification 关闭消息订阅api;
- 【新增】requestPermission 请求权限api;
- 【修复】ios startScan 扫描蓝牙设备,设置不重复上报设备信息,第二次执行startScan扫描会过滤掉上一次扫描到的蓝牙设备,导致扫描不到全部蓝牙设备;
- 【更新】文档代码示例错误更正,分别列出uni和unix示例代码;
1.0.1(2024-11-11)
(注:不同hx版本最好重新打包基座,以避免出现版本差异的错误)
-
【新增】ios兼容;
-
【更新】android-兼容targetSdkVersion 34(广播接收器新增行为标志参数);
-
【更新】兼容hx4.25版本+ 为了优化js回调性能,回调触发一次就会注销,导致无法持续触发回调的问题(本插件使用了hx4.27版本新增的“@UTSJS.keepAlive”装饰器解决了这个问题,所以本插件只支持 < hx4.25版本和 >= hx4.27版本)【详情请查看】;
-
【新增】android-支持多个低功耗蓝牙同时连接设备;
-
【更新】android-优化低功耗蓝牙连接成功发现服务失败的问题;
平台兼容性
Vue2 | Vue3 |
---|---|
√ | √ |
App | 快应用 | 微信小程序 | 支付宝小程序 | 百度小程序 | 字节小程序 | QQ小程序 |
---|---|---|---|---|---|---|
HBuilderX 4.0,Android:6.0,iOS:12,HarmonyNext:不确定 | × | × | × | × | × | × |
钉钉小程序 | 快手小程序 | 飞书小程序 | 京东小程序 |
---|---|---|---|
× | × | × | × |
H5-Safari | Android Browser | 微信浏览器(Android) | QQ浏览器(Android) | Chrome | IE | Edge | Firefox | PC-Safari |
---|---|---|---|---|---|---|---|---|
× | × | × | × | × | × | × | × | × |
xwe-bluetooth(低功耗蓝牙插件)
HBuilder X 支持版本
支持版本 |
---|
3.9+ |
vue版本兼容
vue2 | vue3 | vue3+ts |
---|---|---|
√ | √ | √ |
平台兼容
(uniapp、uniappX) App-Android |
(uniapp、uniappX) App-iOS |
---|---|
√(6-14+) | √(12-17+) |
权限说明文档
-
【android】
内置注册权限:插件内配置了AndroidManifest.xml,内置权限如下:
注意:下面权限已经在插件内配置,项目中不需要重复配置了(权限配置兼容了android12+)
<uses-feature
android:name="android.hardware.bluetooth_le"
android:required="true" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission
android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission
android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30" />
<uses-permission
android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation"
tools:targetApi="S" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
动态申请权限:下面的权限是需要动态申请的:
//android12及其以上 需要动态申请以下权限(附近设备权限)【可合并申请】
android.permission.BLUETOOTH_SCAN
android.permission.BLUETOOTH_ADVERTISE
android.permission.BLUETOOTH_CONNECT
//android12以下 需要动态申请以下权限(定位权限)【可合并申请】
android.permission.ACCESS_COARSE_LOCATION
android.permission.ACCESS_FINE_LOCATION
除了以上权限,还需要下面功能开启
蓝牙开关开启、定位服务开关开启(定位服务android12及以上不需要,经过个人亲测在鸿蒙双系统的手机上必须要开启定位服务才能扫描到设备)
-
【ios】
内置注册权限:插件内配置了Info.plist,内置权限如下:
注意:下面权限已经在插件内配置,项目中不需要重复配置了
<dict>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>开启蓝牙权限</string>
<key>NSBluetoothAlwaysUsageDescription</key>
<string>开启蓝牙权限</string>
</dict>
除了以上权限,还需要下面功能开启
蓝牙开关开启
接口使用文档
-
引入插件和实例化
import {XWEBlue} from '@/uni_modules/xwe-bluetooth';
let xweBlue = new XWEBlue();
-
引入插件所需类型
说明:ts/unix项目需要用到类型方可引用,不需要的可以不引用
import {
MegOption,
ScanOption,
ConnectOption,
RequestMtuOption,
NotificationOption,
WriteCharacteristicOption,
GetDeviceServicesOption,
GetDeviceCharacteristicsOption,
XWEBlueRequestPermissionOption
} from '@/uni_modules/xwe-bluetooth';
-
初始化插件
xweBlue.initBle(callback)
说明:插件必须先初始化,否则无法调用蓝牙主要api,建议全局初始化一次就够了,最好不要多次调用初始化。
平台差异
app-android | app-ios |
---|---|
√ | √ |
callback返回参数说明
属性 | 类型 | 说明 |
---|---|---|
callbackOption | MegOption | 初始化状态返回、蓝牙设备连接断开返回 |
callbackOption结构说明
属性 | uniapp类型 | uniappX类型 | 说明 |
---|---|---|---|
code | number | number | 状态返回,详情查看 【code状态码说明】 |
message | string | string | 状态提示消息,详情查看 【code状态码说明】 |
data | Object | UTSJSONObject | 连接的蓝牙设备断开会返回数据(无数据不会返回此字段) |
data结构说明(蓝牙设备断开连接的状态码:-21)【android数据结构】
说明:data返回的status状态数据,是为了在更多复杂场景中,拿到原始状态进行判断,才专门返回的数据,普通需求按照code返回的状态进行操作即可。
属性 | 类型 | 说明 |
---|---|---|
status | number | 连接或断开连接的状态 具体查看android开发文档 |
newState | number | 新的连接状态 具体查看android开发文档 |
deviceId | string | 断开连接的蓝牙设备deviceId |
data结构说明(蓝牙设备断开连接的状态码:-21)【ios数据结构】
说明:data返回的domain、code、userInfo等数据,是为了在更多复杂场景中,拿到一些原始数据进行判断,才专门返回的数据,普通需求按照code返回的状态进行操作即可。
属性 | 类型 | 说明 |
---|---|---|
domain | string | 断开连接的错误域 具体查看ios开发文档 【非外设造成的断开不会返回】 |
code | number | 断开连接的错误code 具体查看ios开发文档 【非外设造成的断开不会返回】 |
userInfo | Object | 断开连接的错误信息 具体查看ios开发文档 【非外设造成的断开不会返回】 |
deviceId | string | 断开连接的蓝牙设备deviceId |
调用代码示例
【uniapp示例】
xweBlue.initBle((callbackOption) => {
//初始化成功
if(callbackOption.code == 1){
console.log('初始化成功',callbackOption);
}
//【仅限ios】初始化蓝牙模块触发蓝牙权限-允许
if(callbackOption.code == 15){
console.log('授权了蓝牙权限',callbackOption);
}
//【仅限ios】初始化蓝牙模块触发蓝牙权限-拒绝
if(callbackOption.code == -15){
console.log('拒绝了蓝牙权限',callbackOption);
}
//连接断开-状态监听【android】
if(callbackOption.code == -21){
console.log('连接或断开连接状态',callbackOption.data.status);
console.log('新的连接状态',callbackOption.data.newState);
console.log('断开连接的设备deviceId',callbackOption.data.deviceId);
}
//连接断开-状态监听【ios】
if(callbackOption.code == -21){
console.log('断开连接错误域',callbackOption.data.domain);
console.log('断开连接错误code',callbackOption.data.code);
console.log('断开连接错误信息',callbackOption.data.userInfo);
console.log('断开连接的设备deviceId',callbackOption.data.deviceId);
}
});
【uniappX示例】
xweBlue.initBle((callbackOption) => {
//初始化成功
if(callbackOption.code == 1){
console.log('初始化成功',callbackOption);
}
//【仅限ios】初始化蓝牙模块触发蓝牙权限-允许
if(callbackOption.code == 15){
console.log('授权了蓝牙权限',callbackOption);
}
//【仅限ios】初始化蓝牙模块触发蓝牙权限-拒绝
if(callbackOption.code == -15){
console.log('拒绝了蓝牙权限',callbackOption);
}
//连接断开-状态监听【android】
if(callbackOption.code == -21){
console.log('连接或断开连接状态',callbackOption.data?.['status']);
console.log('新的连接状态',callbackOption.data?.['newState']);
console.log('断开连接的设备deviceId',callbackOption.data?.['deviceId']);
}
//连接断开-状态监听【ios】
if(callbackOption.code == -21){
console.log('断开连接错误域',callbackOption.data?.['domain']);
console.log('断开连接错误code',callbackOption.data?.['code']);
console.log('断开连接错误信息',callbackOption.data?.['userInfo']);
console.log('断开连接的设备deviceId',callbackOption.data?.['deviceId']);
}
});
-
权限检测
xweBlue.permisCheck(callback)
说明:检测蓝牙权限是否满足条件,如果满足条件则返回10,不满足条件则返回对应的code码,详情查看【code状态码说明】
平台差异
app-android | app-ios |
---|---|
√ | √ |
callback返回参数说明
属性 | 类型 | 说明 |
---|---|---|
callbackOption | MegOption | 停止扫描的状态 |
callbackOption结构说明
属性 | 类型 | 说明 |
---|---|---|
code | number | 状态返回,详情查看 【code状态码说明】 |
message | string | 状态提示消息,详情查看 【code状态码说明】 |
调用代码示例
【uniapp/uniappX示例】
xweBlue.permisCheck((callbackOption) => {
if(callbackOption.code == 10){
console.log('权限满足',callbackOption);
}else{
console.log('权限不满足',callbackOption);
}
});
-
请求权限
xweBlue.requestPermission(callback)
平台差异
app-android | app-ios |
---|---|
√ | √ |
option结构说明
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
permission | Array<string> | 是 | 请求的权限名称,android可以多权限合并请求,ios只内置了一个蓝牙权限 | |
callback | function | 否 | 权限请求返回的状态,状态码详情查看 【code状态码说明】 |
permission参数结构说明
android | ios |
---|---|
【android 12以下请求定位权限】 android.permission.ACCESS_FINE_LOCATION android.permission.ACCESS_COARSE_LOCATION 【android 12及其以上请求附近设备权限】 android.permission.BLUETOOTH_SCAN android.permission.BLUETOOTH_CONNECT android.permission.BLUETOOTH_ADVERTISE |
【蓝牙权限】 bluetooth |
callback返回参数说明
属性 | 类型 | 说明 |
---|---|---|
callbackOption | MegOption | 返回扫描设备的状态和数据 |
callbackOption结构说明
属性 | uniapp类型 | uniappX类型 | 说明 |
---|---|---|---|
code | number | number | 状态返回,详情查看 【code状态码说明】 |
message | string | string | 状态提示消息,详情查看 【code状态码说明】 |
调用代码示例
//(android 12以下请求定位权限)
let permission = [
'android.permission.ACCESS_FINE_LOCATION',
'android.permission.ACCESS_COARSE_LOCATION'
];
//(android 12及其以上请求附近设备权限)
let permission = [
'android.permission.BLUETOOTH_SCAN',
'android.permission.BLUETOOTH_CONNECT',
'android.permission.BLUETOOTH_ADVERTISE'
];
//(ios请求蓝牙权限)
let permission = [
'bluetooth'
];
【uniapp示例】
xweBlue.requestPermission({
permission:permission,
callback:(callbackOption) => {
console.log('requestPermission-请求权限',callbackOption);
//允许权限
if(callbackOption.code == 200){
console.log('requestPermission-允许权限',callbackOption);
}
//拒绝权限
if(callbackOption.code == 201){
console.log('requestPermission-拒绝权限',callbackOption);
}
//永久拒绝权限【只限android会触发】
if(callbackOption.code == 202){
console.log('requestPermission-永久拒绝权限',callbackOption.data);
}
}
});
【uniappX示例】
xweBlue.requestPermission({
permission:permission,
callback:(callbackOption) => {
console.log('requestPermission-请求权限',callbackOption);
//允许权限
if(callbackOption.code == 200){
console.log('requestPermission-允许权限',callbackOption);
}
//拒绝权限
if(callbackOption.code == 201){
console.log('requestPermission-拒绝权限',callbackOption);
}
//永久拒绝权限【只限android会触发】
if(callbackOption.code == 202){
console.log('requestPermission-永久拒绝权限',callbackOption.data);
}
}
} as XWEBlueRequestPermissionOption);
-
开始扫描蓝牙设备
xweBlue.startScan(option)
平台差异
app-android | app-ios |
---|---|
√ | √ |
option结构说明
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
services | Array<string> | 否 | 要扫描的蓝牙主services uuid,设置了这个就只会扫描广播中包含这个uuid的主服务蓝牙设备(即:advertisServiceUUIDs返回的uuid) | |
allowDuplicatesKey | boolean | true | 否 | 是否上报重复设备信息,默认:true(重复上报),这里的上报一般都是设备信息发生改变就会重复上报,比如蓝牙rssi信号改变了,广播服务改变了等 |
callback | function | 否 | 扫描回调函数,返回扫描的状态和结果,状态码详情查看 【code状态码说明】 |
callback返回参数说明
属性 | 类型 | 说明 |
---|---|---|
callbackOption | MegOption | 返回扫描设备的状态和数据 |
callbackOption结构说明
属性 | uniapp类型 | uniappX类型 | 说明 |
---|---|---|---|
code | number | number | 状态返回,详情查看 【code状态码说明】 |
message | string | string | 状态提示消息,详情查看 【code状态码说明】 |
data | Object | UTSJSONObject | 返回扫描到的蓝牙设备数据(无数据不会返回此字段) |
data结构说明
属性 | 类型 | 说明 | 平台差异 |
---|---|---|---|
name | string | 蓝牙设备广播名称,不是所有设备都有 | |
deviceId | string | 蓝牙设备deviceId | |
rssi | number | 蓝牙设备信号 | |
advertisData | Array<string> | 蓝牙设备广播ManufacturerData数据 | |
advertisServiceUUIDs | Array<string> | 蓝牙广播ServiceUUIDs数据 | |
localName | string | 蓝牙广播LocalName数据 | |
serviceData | Object | 蓝牙广播ServiceData数据 | |
connectable | boolean | 蓝牙设备是否可连接,如果为false说明这个设备是无法连接的 | |
deviceType | Object | 蓝牙设备的类型,如果不支持不会返回这个字段 具体参考android开发文档 |
ios不支持 |
flags | Object | 蓝牙设备广播标志,如果不支持不会返回这个字段 具体参考android开发文档 |
ios不支持 |
deviceType结构说明【ios不支持】
属性 | 类型 | 说明 |
---|---|---|
code | number | 蓝牙设备类型 |
text | string | 蓝牙设备类型说明 |
deviceType code结构说明【ios不支持】
code | 类型 | 说明 |
---|---|---|
1 | number | 经典蓝牙,对应原生的: BluetoothDevice.DEVICE_TYPE_CLASSIC android开发文档 |
2 | number | BLE蓝牙,对应原生的: BluetoothDevice.DEVICE_TYPE_LE android开发文档 |
3 | number | 同时支持经典蓝牙和BLE,对应原生的: BluetoothDevice.DEVICE_TYPE_DUAL android开发文档 |
0 | number | 未知设备,对应原生的: BluetoothDevice.DEVICE_TYPE_UNKNOWN android开发文档 |
调用代码示例
【uniapp示例】
xweBlue.startScan({
allowDuplicatesKey:true,
callback:(callbackOption) => {
console.log('startScan-开始扫描蓝牙设备',callbackOption);
//扫描开始
if(callbackOption.code == 30){
console.log('startScan-扫描开始',callbackOption);
}
//扫描失败
if(callbackOption.code == -30){
console.log('startScan-扫描失败',callbackOption);
}
//扫描成功
if(callbackOption.code == 31){
console.log('startScan-扫描到的设备数据',callbackOption.data);
}
//扫描结束
if(callbackOption.code == -31){
console.log('startScan-扫描结束',callbackOption);
}
}
});
【uniappX示例】
xweBlue.startScan({
allowDuplicatesKey:true,
callback:(callbackOption) => {
console.log('startScan-开始扫描蓝牙设备',callbackOption);
//扫描开始
if(callbackOption.code == 30){
console.log('startScan-扫描开始',callbackOption);
}
//扫描失败
if(callbackOption.code == -30){
console.log('startScan-扫描失败',callbackOption);
}
//扫描成功
if(callbackOption.code == 31){
console.log('startScan-扫描到的设备数据',callbackOption.data);
}
//扫描结束
if(callbackOption.code == -31){
console.log('startScan-扫描结束',callbackOption);
}
}
} as ScanOption);
-
停止扫描蓝牙设备
xweBlue.stopScan(callback)
注意:调用停止扫描成功,同时会触发开始扫描设备xweBlue.startScan的回调。
平台差异
app-android | app-ios |
---|---|
√ | √ |
callback返回参数说明
属性 | 类型 | 说明 |
---|---|---|
callbackOption | MegOption | 停止扫描的状态 |
callbackOption结构说明
属性 | 类型 | 说明 |
---|---|---|
code | number | 状态返回,详情查看 【code状态码说明】 |
message | string | 状态提示消息,详情查看 【code状态码说明】 |
调用代码示例
【uniapp/uniappX示例】
xweBlue.stopScan((callbackOption) => {
console.log('stopScan-停止扫描',callbackOption);
//扫描结束
if(callbackOption.code == -31){
console.log('stopScan-扫描结束',callbackOption);
}
});
-
连接蓝牙设备
xweBlue.connect(option)
注意:蓝牙设备断开连接,会触发插件初始化xweBlue.initBle的回调。
平台差异
app-android | app-ios |
---|---|
√ | √ |
option结构说明
属性 | 类型 | 默认值 | 必填 | 说明 | 平台差异 |
---|---|---|---|---|---|
deviceId | string | 是 | 蓝牙设备deviceId | ||
timeout | number | 10000 | 否 | 连接超时的时间,单位ms,不传默认:10000ms | |
powerLevel | string | 否 | 蓝牙设备连接的优先级, CONNECTION_PRIORITY_BALANCED (平衡的连接优先级)、 CONNECTION_PRIORITY_HIGH (高优先级连接)、 CONNECTION_PRIORITY_LOW_POWER (低功耗连接) |
ios不支持 | |
reconnect | boolean | false | 否 | 是否开启蓝牙设备自动重连 |
ios不支持 |
callback | function | 否 | 蓝牙设备连接回调函数,返回连接的状态和发现的服务特征,状态码详情查看 【code状态码说明】 |
callback返回参数说明
属性 | 类型 | 说明 |
---|---|---|
callbackOption | MegOption | 返回连接的状态和发现的服务特征 |
callbackOption结构说明
属性 | uniapp类型 | uniappX类型 | 说明 |
---|---|---|---|
code | number | number | 状态返回,详情查看 【code状态码说明】 |
message | string | string | 状态提示消息,详情查看 【code状态码说明】 |
data | Object | UTSJSONObject | 返回连接原始状态、服务特征等数据(无数据不会返回此字段) |
data结构说明(连接相关的状态码:21、-20、-21)
说明:data返回的状态数据,是为了在更多复杂场景中,拿到原始状态进行判断,才专门返回的数据,普通需求按照code返回的状态进行操作即可。
属性 | 类型 | 说明 | 平台差异 |
---|---|---|---|
status | number | 连接或断开连接的状态(如无此字段返回,说明非系统级失败) 具体查看android开发文档 |
ios不支持 |
newState | number | 新的连接状态(如无此字段返回,说明非系统级失败) 具体查看android开发文档 |
ios不支持 |
deviceId | string | 蓝牙设备deviceId |
data结构说明(发现服务的状态码:40)
属性 | uniapp类型 | uniappX类型 | 说明 |
---|---|---|---|
services | Array<Object> | Array<UTSJSONObject> | 设备所有服务列表 |
characteristics | Object | UTSJSONObject | 设备每个服务下面的所有特征值,每个服务为键值可获取下面的特征值 |
deviceId | string | string | 蓝牙设备deviceId |
调用代码示例
【uniapp示例】
xweBlue.connect({
deviceId:'',
powerLevel:'CONNECTION_PRIORITY_BALANCED',
reconnect:false,
callback:(callbackOption) => {
console.log('connect-连接蓝牙设备',callbackOption);
//连接中
if(callbackOption.code == 20){
console.log('connect-连接中',callbackOption);
}
//连接失败
if(callbackOption.code == -20){
console.log('connect-连接失败',callbackOption);
}
//连接成功
if(callbackOption.code == 21){
console.log('connect-连接成功',callbackOption.data);
}
//发现服务特征
if(callbackOption.code == 40){
console.log('connect-发现服务特征',callbackOption.data);
}
//未发现服务特征
if(callbackOption.code == -40){
console.log('connect-未发现服务特征',callbackOption.data);
}
}
});
【uniappX示例】
xweBlue.connect({
deviceId:'',
powerLevel:'CONNECTION_PRIORITY_BALANCED',
reconnect:false,
callback:(callbackOption) => {
console.log('connect-连接蓝牙设备',callbackOption);
//连接中
if(callbackOption.code == 20){
console.log('connect-连接中',callbackOption);
}
//连接失败
if(callbackOption.code == -20){
console.log('connect-连接失败',callbackOption);
}
//连接成功
if(callbackOption.code == 21){
console.log('connect-连接成功',callbackOption.data);
}
//发现服务特征
if(callbackOption.code == 40){
console.log('connect-发现服务特征',callbackOption.data);
}
//未发现服务特征
if(callbackOption.code == -40){
console.log('connect-未发现服务特征',callbackOption.data);
}
}
} as ConnectOption);
-
请求设置MTU最大传输单元
xweBlue.requestMtu(option)
注意:需要调用xweBlue.connect连接成功后,才能调用此接口。
【ios不支持,因为ios没有特定设置mtu的方式,ios是根据设备支持的大小自行协商,ios插件内置了这个方法,调用也会返回结果,但是只是一个伪调用。】
平台差异
app-android | app-ios |
---|---|
√ | X |
option结构说明
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
deviceId | string | 是 | 蓝牙设备deviceId | |
mtu | number | 是 | 设置mtu最大的传输单元,单位 bytes | |
callback | function | 否 | 请求设置MTU最大传输单元回调函数,返回设置的状态码,状态码详情查看 【code状态码说明】 |
callback返回参数说明
属性 | 类型 | 说明 |
---|---|---|
callbackOption | MegOption | 返回请求设置MTU最大传输单元状态和数据 |
callbackOption结构说明
属性 | uniapp类型 | uniappX类型 | 说明 |
---|---|---|---|
code | number | number | 状态返回,详情查看 【code状态码说明】 |
message | string | string | 状态提示消息,详情查看 【code状态码说明】 |
data | Object | UTSJSONObject | 返回mtu设置的最终结果(无数据不会返回此字段) |
data结构说明(设置成功状态码:60)
说明:data返回数据是系统api返回的一些原始数据,可能一些业务场景需要。
属性 | 类型 | 说明 | 平台差异 |
---|---|---|---|
mtu | number | 最终设置成功的mtu单元,不一定所有设备都支持设置mtu。比如你设置的mtu是120,设置成功后返回的mtu是23,那说明这个设备最大就只支持23 bytes。最终蓝牙支持的最大传输单元,以设备实际支持的大小为准。 | |
status | number | 设置成功返回的status (具体查看android开发文档) |
ios不支持 |
deviceId | string | 蓝牙设备deviceId |
调用代码示例
【uniapp示例】
xweBlue.requestMtu({
deviceId:'',
mtu:200,
callback:(callbackOption) => {
console.log('requestMtu-请求设置mtu',callbackOption);
//请求设置mtu成功
if(callbackOption.code == 60){
console.log('requestMtu-请求设置mtu成功',callbackOption.data);
}
//请求设置mtu失败
if(callbackOption.code == -60){
console.log('requestMtu-请求设置mtu失败',callbackOption);
}
}
})
【uniappX示例】
xweBlue.requestMtu({
deviceId:'',
mtu:200,
callback:(callbackOption) => {
console.log('requestMtu-请求设置mtu',callbackOption);
//请求设置mtu成功
if(callbackOption.code == 60){
console.log('requestMtu-请求设置mtu成功',callbackOption.data);
}
//请求设置mtu失败
if(callbackOption.code == -60){
console.log('requestMtu-请求设置mtu失败',callbackOption);
}
}
} as RequestMtuOption);
-
断开蓝牙设备连接
xweBlue.disconnect(deviceId)
注意:蓝牙设备断开连接,会触发插件初始化xweBlue.initBle的回调。
平台差异
app-android | app-ios |
---|---|
√ | √ |
deviceId参数说明
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
deviceId | string | 是 | 断开连接的蓝牙设备deviceId |
-
释放蓝牙设备连接资源
xweBlue.close(deviceId)
平台差异
app-android | app-ios |
---|---|
√ | √ |
deviceId参数说明
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
deviceId | string | 是 | 释放资源的蓝牙设备deviceId,如果确定不使用这个蓝牙设备了,就调用这个api释放掉蓝牙连接资源 |
-
获取蓝牙设备连接状态
xweBlue.isConnectState(deviceId)
平台差异
app-android | app-ios |
---|---|
√ | √ |
deviceId参数说明
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
deviceId | string | 是 | 获取蓝牙设备连接状态的deviceId |
return的数据
返回 | 类型 | 说明 |
---|---|---|
return | boolean | 返回是否处于连接状态,true-是 false-否 |
-
开启消息订阅
xweBlue.notification(option)
平台差异
app-android | app-ios |
---|---|
√ | √ |
option结构说明
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
deviceId | string | 是 | 蓝牙设备deviceId | |
serviceId | string | 是 | 蓝牙设备服务uuid | |
characteristicId | string | 是 | 蓝牙设备特征值uuid | |
callback | function | 否 | 消息订阅的回调,会返回状态和设备下发的消息,状态码详情查看 【code状态码说明】 |
callback返回参数说明
属性 | 类型 | 说明 |
---|---|---|
callbackOption | MegOption | 返回开启消息订阅的状态和设备下发的消息 |
callbackOption结构说明
属性 | uniapp类型 | uniappX类型 | 说明 |
---|---|---|---|
code | number | number | 状态返回,详情查看 【code状态码说明】 |
message | string | string | 状态提示消息,详情查看 【code状态码说明】 |
data | Object | UTSJSONObject | 返回设备下发的消息(无数据不会返回此字段) |
data结构说明
属性 | 类型 | 说明 |
---|---|---|
value | string | 设备下发的消息 |
deviceId | string | 蓝牙设备deviceId |
调用代码示例
【uniapp示例】
xweBlue.notification({
deviceId:'',
serviceId:'',
characteristicId:'',
callback:(callbackOption) => {
console.log('notification-开启消息订阅',callbackOption);
//开启消息订阅成功
if(callbackOption.code == 50){
console.log('notification-开启消息订阅成功',callbackOption);
}
//开启消息订阅失败
if(callbackOption.code == -50){
console.log('notification-开启消息订阅失败',callbackOption);
}
//收到消息通知
if(callbackOption.code == 51){
console.log('notification-收到消息通知',callbackOption.data);
}
}
});
【uniappX示例】
xweBlue.notification({
deviceId:'',
serviceId:'',
characteristicId:'',
callback:(callbackOption) => {
console.log('notification-开启消息订阅',callbackOption);
//开启消息订阅成功
if(callbackOption.code == 50){
console.log('notification-开启消息订阅成功',callbackOption);
}
//开启消息订阅失败
if(callbackOption.code == -50){
console.log('notification-开启消息订阅失败',callbackOption);
}
//收到消息通知
if(callbackOption.code == 51){
console.log('notification-收到消息通知',callbackOption.data);
}
}
} as NotificationOption);
-
关闭消息订阅
xweBlue.closeNotification(option)
平台差异
app-android | app-ios |
---|---|
√ | √ |
option结构说明
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
deviceId | string | 是 | 蓝牙设备deviceId | |
serviceId | string | 是 | 蓝牙设备服务uuid | |
characteristicId | string | 是 | 蓝牙设备特征值uuid | |
callback | function | 否 | 关闭消息订阅的回调,会返回关闭状态,状态码详情查看 【code状态码说明】 |
callback返回参数说明
属性 | 类型 | 说明 |
---|---|---|
callbackOption | MegOption | 返回关闭消息订阅的状态 |
callbackOption结构说明
属性 | uniapp类型 | uniappX类型 | 说明 |
---|---|---|---|
code | number | number | 状态返回,详情查看 【code状态码说明】 |
message | string | string | 状态提示消息,详情查看 【code状态码说明】 |
data | Object | UTSJSONObject | 返回关闭消息订阅的设备id(无数据不会返回此字段) |
data结构说明
属性 | 类型 | 说明 |
---|---|---|
deviceId | string | 蓝牙设备deviceId |
调用代码示例
【uniapp示例】
xweBlue.closeNotification({
deviceId:'',
serviceId:'',
characteristicId:'',
callback:(callbackOption) => {
console.log('关闭消息订阅',callbackOption);
}
});
【uniappX示例】
xweBlue.closeNotification({
deviceId:'',
serviceId:'',
characteristicId:'',
callback:(callbackOption) => {
console.log('关闭消息订阅',callbackOption);
}
} as NotificationOption);
-
给设备写入数据
xweBlue.writeCharacteristic(option)
平台差异
app-android | app-ios |
---|---|
√ | √ |
option结构说明
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
deviceId | string | 是 | 蓝牙设备deviceId | |
serviceId | string | 是 | 蓝牙设备服务uuid | |
characteristicId | string | 是 | 蓝牙设备特征值uuid | |
value | Array\ |
是 | 写入设备的数据,十进和十六进制数据都可(十进制:[14,17],十六进制:[0x0E,0x11]),api内会将数据转换成ByteArray格式 | |
writeType | string | 否 | 蓝牙特征值写入模式,不设置会根据当前特征值支持的写入模式进行设置,如果特征值不支持任何写入模式写入会失败。 | |
callback | function | 否 | 写入数据的回调,返回写入的状态,状态码详情查看 【code状态码说明】 |
writeType属性值说明
属性 | 说明 |
---|---|
write | 强制回复写,不支持会报错 |
writeNoResponse | 强制无回复写,不支持会报错 |
callback返回参数说明
属性 | 类型 | 说明 |
---|---|---|
callbackOption | MegOption | 返回写入的状态 |
callbackOption结构说明
属性 | uniapp类型 | uniappX类型 | 说明 |
---|---|---|---|
code | number | number | 状态返回,详情查看 【code状态码说明】 |
message | string | string | 状态提示消息,详情查看 【code状态码说明】 |
data | Object | UTSJSONObject | 返回写入的状态 |
data结构说明(写入失败的状态码:-55)【android数据结构】
说明:data返回的status状态数据,是为了在更多复杂场景中,拿到原始状态进行判断,才专门返回的数据,普通需求按照code返回的状态进行操作即可。
属性 | 类型 | 说明 |
---|---|---|
status | number | 连接的状态 具体查看android开发文档 |
deviceId | string | 蓝牙设备deviceId(所有状态都会返回) |
data结构说明(写入失败的状态码:-55)【ios数据结构】
说明:data返回的domain、code、userInfo等数据,是为了在更多复杂场景中,拿到一些原始数据进行判断,才专门返回的数据,普通需求按照code返回的状态进行操作即可。
属性 | 类型 | 说明 |
---|---|---|
domain | string | 写入错误的错误域 具体查看ios开发文档 【非系统错误不会返回】 |
code | number | 写入错误的错误code 具体查看ios开发文档 【非系统错误不会返回】 |
userInfo | Object | 写入错误的错误信息 具体查看ios开发文档 【非系统错误不会返回】 |
deviceId | string | 蓝牙设备deviceId(所有状态都会返回) |
调用代码示例
【uniapp示例】
xweBlue.writeCharacteristic({
deviceId:'',
serviceId:'',
characteristicId:'',
value:[0x0E,0x11],
callback:(callbackOption) => {
console.log('writeCharacteristic-设备写入数据',callbackOption);
//写入数据成功
if(callbackOption.code == 55){
console.log('writeCharacteristic-写入数据成功',callbackOption);
}
//写入数据失败
if(callbackOption.code == -55){
console.log('writeCharacteristic-写入数据失败',callbackOption);
}
}
});
【uniappX示例】
xweBlue.writeCharacteristic({
deviceId:'',
serviceId:'',
characteristicId:'',
value:[0x0E,0x11],
callback:(callbackOption) => {
console.log('writeCharacteristic-设备写入数据',callbackOption);
//写入数据成功
if(callbackOption.code == 55){
console.log('writeCharacteristic-写入数据成功',callbackOption);
}
//写入数据失败
if(callbackOption.code == -55){
console.log('writeCharacteristic-写入数据失败',callbackOption);
}
}
} as WriteCharacteristicOption);
-
获取设备所有服务
xweBlue.getDeviceServices(option)
平台差异
app-android | app-ios |
---|---|
√ | √ |
option结构说明
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
deviceId | string | 是 | 蓝牙设备deviceId | |
callback | function | 否 | 获取设备所有服务的回调,会返回状态和蓝牙设备服务uuid,状态码详情查看 【code状态码说明】 |
callback返回参数说明
属性 | 类型 | 说明 |
---|---|---|
callbackOption | MegOption | 返回状态和蓝牙设备服务uuid |
callbackOption结构说明
属性 | uniapp类型 | uniappX类型 | 说明 |
---|---|---|---|
code | number | number | 状态返回,详情查看 【code状态码说明】 |
message | string | string | 状态提示消息,详情查看 【code状态码说明】 |
data | Object | UTSJSONObject | 返回蓝牙设备服务uuid |
data结构说明
属性 | uniapp类型 | uniappX类型 | 说明 |
---|---|---|---|
sevices | Array<Object> | Array<UTSJSONObject> | 蓝牙设备服务uuid |
deviceId | string | string | 蓝牙设备deviceId |
sevices结构说明
属性 | 类型 | 说明 |
---|---|---|
uuid | string | 蓝牙设备服务uuid |
调用代码示例
【uniapp示例】
xweBlue.getDeviceServices({
deviceId:'',
callback:(callbackOption) => {
console.log('getDeviceServices-获取设备所有服务',callbackOption);
//获取服务成功
if(callbackOption.code == 40){
console.log('getDeviceServices-获取服务成功',callbackOption.data.sevices);
}
}
});
【uniappX示例】
xweBlue.getDeviceServices({
deviceId:'',
callback:(callbackOption) => {
console.log('getDeviceServices-获取设备所有服务',callbackOption);
//获取服务成功
if(callbackOption.code == 40){
console.log('getDeviceServices-获取服务成功',callbackOption.data?.['sevices']);
}
}
} as GetDeviceServicesOption);
-
获取设备所选服务特征值
xweBlue.getDeviceCharacteristics(option)
平台差异
app-android | app-ios |
---|---|
√ | √ |
option结构说明
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
deviceId | string | 是 | 蓝牙设备deviceId | |
serviceId | string | 是 | 蓝牙设备服务uuid | |
callback | function | 否 | 获取所选蓝牙设备服务的特征值回调,会返回状态和蓝牙设备服务特征值uuid,状态码详情查看 【code状态码说明】 |
callback返回参数说明
属性 | 类型 | 说明 |
---|---|---|
callbackOption | MegOption | 返回状态和蓝牙设备服务特征值uuid |
callbackOption结构说明
属性 | uniapp类型 | uniappX类型 | 说明 |
---|---|---|---|
code | number | number | 状态返回,详情查看 【code状态码说明】 |
message | string | string | 状态提示消息,详情查看 【code状态码说明】 |
data | Object | UTSJSONObject | 返回蓝牙设备服务特征值uuid |
data结构说明
属性 | uniapp类型 | uniappX类型 | 说明 |
---|---|---|---|
characteristics | Array<Object> | Array<UTSJSONObject> | 蓝牙设备服务特征值列表 |
deviceId | string | string | 蓝牙设备deviceId |
characteristics结构说明
属性 | uniapp类型 | uniappX类型 | 说明 |
---|---|---|---|
uuid | string | string | 蓝牙设备服务特征值uuid |
properties | Object | UTSJSONObject | 服务特征支持的操作类型 |
properties结构说明
属性 | 类型 | 说明 |
---|---|---|
read | boolean | 该特征值是否支持 read 操作 |
write | boolean | 该特征值是否支持 write 操作 |
notify | boolean | 该特征值是否支持 notify 操作 |
indicate | boolean | 该特征值是否支持 indicate 操作 |
调用代码示例
【uniapp示例】
xweBlue.getDeviceCharacteristics({
deviceId:'',
callback:(callbackOption) => {
console.log('getDeviceServices-获取设备所有服务特征值',callbackOption);
//获取服务特征值成功
if(callbackOption.code == 40){
console.log('getDeviceServices-获取服务特征值成功',callbackOption.data.characteristics);
}
}
});
【uniappX示例】
xweBlue.getDeviceCharacteristics({
deviceId:'',
callback:(callbackOption) => {
console.log('getDeviceServices-获取设备所有服务特征值',callbackOption);
//获取服务特征值成功
if(callbackOption.code == 40){
console.log('getDeviceServices-获取服务特征值成功',callbackOption.data?.['characteristics']);
}
}
} as GetDeviceServicesOption);
-
获取已连接的蓝牙设备
xweBlue.getConnectDevices(callback)
平台差异
app-android | app-ios |
---|---|
√ | √ |
callback返回参数说明
属性 | 类型 | 说明 |
---|---|---|
callbackOption | MegOption | 返回状态和获取的已连接蓝牙设备数据 |
callbackOption结构说明
属性 | uniapp类型 | uniappX类型 | 说明 |
---|---|---|---|
code | number | number | 状态返回,详情查看 【code状态码说明】 |
message | string | string | 状态提示消息,详情查看 【code状态码说明】 |
data | Object | UTSJSONObject | 返回已连接蓝牙设备列表 |
data结构说明
属性 | uniapp类型 | uniappX类型 | 说明 |
---|---|---|---|
connectList | Arry<Object> | Arry<UTSJSONObject> | 已连接蓝牙设备列表 |
connectList结构说明
属性 | uniapp类型 | 说明 |
---|---|---|
name | string | 蓝牙设备广播名称 |
deviceId | string | 蓝牙设备deviceId |
调用代码示例
【uniapp示例】
xweBlue.getConnectDevices((callbackOption) => {
console.log('获取已连接的蓝牙设备',callbackOption.data.connectList);
});
【uniappX示例】
xweBlue.getConnectDevices((callbackOption) => {
console.log('获取已连接的蓝牙设备',callbackOption.data?.['connectList']);
});
-
创建-监听状态事件(蓝牙状态、定位服务状态)
xweBlue.onReceiverStateChange(callback)
说明:主要监听蓝牙功能所需的一些系统功能状态,蓝牙开关、定位服务开关,ios只监听蓝牙开关状态。
平台差异
app-android | app-ios |
---|---|
√ | √ |
callback返回参数说明
属性 | 类型 | 说明 |
---|---|---|
callbackOption | MegOption | 创建状态返回、蓝牙开关状态返回、定位服务开关状态返回(定位服务仅限android) |
callbackOption结构说明
属性 | 类型 | 说明 |
---|---|---|
code | number | 状态返回,详情查看 【code状态码说明】 |
message | string | 状态提示消息,详情查看 【code状态码说明】 |
调用代码示例
xweBlue.onReceiverStateChange((callbackOption) => {
console.log('创建-监听状态事件(蓝牙状态、定位服务状态)',callbackOption);
});
-
注销-监听状态事件(蓝牙状态、定位服务状态)
xweBlue.unReceiverStateChange(callback)
说明:callback可以传为null,详情查看代码示例。
平台差异
app-android | app-ios |
---|---|
√ | √ |
callback返回参数说明
属性 | 类型 | 说明 |
---|---|---|
callbackOption | MegOption | 注销状态返回 |
callbackOption结构说明
属性 | 类型 | 说明 |
---|---|---|
code | number | 状态返回,详情查看 【code状态码说明】 |
message | string | 状态提示消息,详情查看 【code状态码说明】 |
调用代码示例
xweBlue.unReceiverStateChange((callbackOption) => {
console.log('注销-监听状态事件(蓝牙状态、定位服务状态)',callbackOption);
});
或
xweBlue.unReceiverStateChange(null);
-
开启蓝牙
xweBlue.enable(callback)
说明:callback可以传为null,详情查看代码示例。
平台差异
app-android | app-ios |
---|---|
√ | √ |
android说明 | ios说明 |
---|---|
android 12必须要先开启“附近设备权限”才可以动态开启蓝牙。 android13及其以上废除了这个api,所以在android13及其以上做了跳转到蓝牙设置页面的处理。 |
ios会直接跳转系统设置页面 |
callback返回参数说明
说明:ios不会触发此回调,android只会在android 12请求“附近设备权限”,权限被拒会触发此回调。想要监听蓝牙开关状态,请使用“onReceiverStateChange”进行监听。
属性 | 类型 | 说明 |
---|---|---|
callbackOption | MegOption | 未开启附近设备权限状态返回(只限android12) |
callbackOption结构说明
属性 | 类型 | 说明 |
---|---|---|
code | number | 状态返回,详情查看 【code状态码说明】 |
message | string | 状态提示消息,详情查看 【code状态码说明】 |
调用代码示例
xweBlue.enable((callbackOption) => {
if(callbackOption.code == -14){
console.log('附近设备权限被拒',callbackOption);
}
});
或
xweBlue.enable(null);
-
关闭蓝牙
xweBlue.disable(callback)
说明:callback可以传为null,详情查看代码示例。
平台差异
app-android | app-ios |
---|---|
√ | √ |
android说明 | ios说明 |
---|---|
android 12必须要先开启“附近设备权限”才可以动态关闭蓝牙。 android13及其以上废除了这个api,所以在android13及其以上做了跳转到蓝牙设置页面的处理 |
ios会直接跳转系统设置页面 |
callback返回参数说明
说明:ios不会触发此回调,android只会在android 12请求“附近设备权限”,权限被拒会触发此回调。想要监听蓝牙开关状态,请使用“onReceiverStateChange”进行监听。
属性 | 类型 | 说明 |
---|---|---|
callbackOption | MegOption | 未开启附近设备权限状态返回(只限android12) |
callbackOption结构说明
属性 | 类型 | 说明 |
---|---|---|
code | number | 状态返回,详情查看 【code状态码说明】 |
message | string | 状态提示消息,详情查看 【code状态码说明】 |
调用代码示例
xweBlue.disable((callbackOption) => {
if(callbackOption.code == -14){
console.log('附近设备权限被拒',callbackOption);
}
});
或
xweBlue.disable(null);
code状态码说明
code | 类型 | message | 说明 | 平台差异 |
---|---|---|---|---|
1 | number | Init success | 初始化成功 | |
-1 | number | Not init | 未初始化 | |
10 | number | Permission ok | 权限满足 | |
11 | number | Blue on | 蓝牙开启 | |
-11 | number | Blue off | 蓝牙关闭 | |
12 | number | Location permission enabled | 位置权限已开启 | 仅限android |
-12 | number | Location permission closed | 位置权限已关闭 | 仅限android |
13 | number | Location services on | 定位服务开启 | 仅限android |
-13 | number | Location services off | 定位服务关闭 | 仅限android |
14 | number | Nearby devices permission enabled | 附近设备权限已开启 | 仅限android |
-14 | number | Nearby devices permission closed | 附近设备权限已关闭 | 仅限android |
15 | number | Bluetooth permission enabled | 蓝牙权限已开启 | 仅限ios |
-15 | number | Bluetooth permission closed | 蓝牙权限已关闭 | 仅限ios |
20 | number | Connecting | 蓝牙设备连接中 | |
21 | number | Connect success | 蓝牙设备连接成功 | |
-20 | number | Connect failed | 蓝牙设备连接失败 | |
-21 | number | Disconnected | 蓝牙设备断开连接 | |
30 | number | Scan start | 开始扫描设备 | |
31 | number | Scan success | 扫描设备成功 | |
-30 | number | Scan failed | 扫描设备失败 | |
-31 | number | Scan ended | 扫描设备结束 | |
40 | number | Discovery Services Characteristics | 发现服务特征 | |
-40 | number | Not discovery Services Characteristics | 未发现服务特征 | |
41 | number | Characteristic value do not have write operation permission | 特征值没有写的操作权限 | |
50 | number | Notification success | 开启消息订阅成功 | |
51 | number | Received notification | 接收到订阅的消息 | |
-50 | number | Notification failed | 开启消息订阅失败 | |
52 | number | Close notification success | 关闭消息订阅成功 | |
-52 | number | Close notification failed | 关闭消息订阅失败 | |
55 | number | Write success | 写入成功 | |
-55 | number | Write failed | 写入失败 | |
60 | number | Requestmtu success | 请求设置mtu大小成功 | |
-60 | number | Requestmtu failed | 请求设置mtu大小失败 | |
70 | number | Successfully created listening status event | 创建-监听状态事件成功 | |
-70 | number | Successfully logged off listening status event | 注销-监听状态事件成功 | |
80 | number | Successfully obtained connected device | 获取已连接蓝牙设备成功 | |
200 | number | Authorization successful | 授权已成功 | |
201 | number | Authorization Refusal | 授权已拒绝 | |
202 | number | Permanent refusal of authorization | 授权永久拒绝 |