更新记录

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 授权永久拒绝

隐私、权限声明

1. 本插件需要申请的系统权限列表:

蓝牙

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问