更新记录

1.1.3(2026-09-06)

  • 归并本轮 Android 权限修复:打开蓝牙适配器和扫描前按系统版本与宿主 targetSdkVersion 主动申请附近设备或定位权限,拒绝授权统一返回 9014013;版本号保持 1.1.3,发布时与本版本内容一起提交。
  • 修复 uni-app x Android 示例的函数声明顺序、ArrayBuffer 类型和蓝牙结果字段读取导致的 UTS 编译错误。

1.1.2(2026-08-31)

  • 新增微信小程序真实 BLE Central 实现,覆盖适配器、扫描、连接、服务/特征发现、读写、通知、MTU、RSSI、分包写入和稳定会话。
  • 新增 HarmonyOS NEXT ConnectivityKit 真实 BLE Central 实现,覆盖扫描、GATT 连接、服务/特征发现、读写、通知、MTU、RSSI、多连接和有限自动重连。
  • Android、iOS、HarmonyOS 与微信小程序统一公开 API、错误码、运行态、能力矩阵和稳定会话合同;Web 与其他未实现平台继续明确返回 9014001
  • HarmonyOS 声明 ohos.permission.ACCESS_BLUETOOTH,系统蓝牙开关仍由用户控制;Harmony 运行需重新构建包含本版本的 HAP。
  • 微信小程序新增可控 wx BLE 模拟运行回归,验证扫描、连接、服务/特征、读写、MTU、RSSI、会话 ready 和通知响应匹配。

1.1.1(2026-08-28)

  • 读特征与通知事件新增稳定 hex 字段,修复 Android uni-app 页面收到 UTS ArrayBuffer 桥接包装对象后无法直接显示真实字节的问题;原 value: ArrayBuffer 保持兼容。
  • 修复 uni-app 示例在部分 Android App WebView 中依赖缺失的 TextEncoder,原始写入与分包写入改为页面内 UTF-8 编码。
  • 修复 Android GATT 回调 UUID 大小写不一致导致读、写和通知订阅回调无法命中,稳定会话现可正常从 subscribing 进入 ready
  • Android uni-app 示例对官方不支持的 ArrayBuffer 入参明确提示兼容边界,保留文本、Hex 与稳定会话的真实可用路径。
  • 补全示例的会话阶段文案,服务/特征发现与 closed 停止状态不再显示为未知。
  • 使用 RootCanal + Bumble 可控 GATT 外设完成 Android 模拟器扫描、连接、服务/特征发现、读写、通知、MTU 与 RSSI 回归。
查看更多

平台兼容性

uni-app(5.07)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × ×

uni-app x(5.07)

Chrome Safari Android iOS 鸿蒙 微信小程序
× ×

lizhao-ble

lizhao-ble 是面向 uni-app / uni-app x 的跨端 BLE Central UTS API 插件,统一封装扫描、连接、GATT 读写、通知、RSSI、自动重连和分包写入,适合传感器、门锁、仪表、医疗外设与自定义蓝牙协议等业务。

功能特色

  • Android BLE Central 完整链路:适配器、扫描、连接、服务发现、特征发现、读、写、通知和多连接。
  • iOS 12+ 前台链路:基于 CoreBluetooth 提供扫描、连接、GATT、通知、RSSI、多连接、分包写入与 iOS 前台有限自动重连。
  • HarmonyOS NEXT 原生链路:基于 ConnectivityKit 提供扫描、GATT 连接、服务/特征发现、读写、通知、MTU、RSSI、多连接与有限自动重连。
  • 微信小程序原生链路:直接使用微信 BLE API,保留与 App 端一致的基础 API、运行态和稳定会话合同。
  • 常用链路增强:MTU 协商、RSSI 读取、UTF-8 文本写入、Hex 写入和串行分包写入。
  • 连接策略可控:支持自动重连开关、最大尝试次数与重连间隔,不会无限重试。
  • 运行状态可观测:getCapabilities 用于能力探测,getRuntimeState 用于读取设备、连接和通知订阅快照。
  • 稳定会话:一次调用完成连接、服务/特征发现和通知订阅,并提供每设备串行请求队列、响应匹配、取消与有限重连。
  • API 兼容性:保留常见方法别名,并兼容 filterNames/fliterNamesscanComplete/scanComplate 两组拼写。
  • 平台边界真实:Android、iOS、HarmonyOS 与微信小程序使用各自平台真实实现;Web 与其他未实现平台返回明确错误,不伪造成功。

接入方式选择

场景 推荐方式 说明
标准 BLE 外设通信 规范 API 依次打开适配器、扫描、连接、发现服务/特征,再读写或订阅通知
长指令或大数据写入 writeBLECharacteristicValueChunked chunkSize 串行写入,上一包成功后才发送下一包
文本或十六进制协议 writeBLECharacteristicValueByText / writeBLECharacteristicValueByHex 业务侧无需手动转换 ArrayBuffer
不稳定链路 createBLEConnection 自动重连参数 设置有限次数和间隔,避免无限重试
多端项目 getCapabilities 展示 BLE 入口前先检查 supported 和具体能力字段
设备协议交互 会话 API 使用 startBLESession + sendBLESessionRequest,减少业务层自行维护状态机和请求队列
打印机专用协议 单独封装业务插件 本插件只提供通用 BLE Central,不包含厂商打印 SDK、排版或打印任务

支持平台

平台 是否支持 说明
uni-app Android 支持 Vue2、Vue3、app-vue、app-nvue;Android 5.0+
uni-app x Android 支持 UVUE;Android 5.0+
iOS 有限支持 iOS 12+ 前台 CoreBluetooth 能力;支持扫描、连接、GATT、通知、RSSI 与前台有限自动重连,MTU 协商返回明确不支持
HarmonyOS NEXT 支持 使用 ConnectivityKit;需声明蓝牙权限并重新构建包含插件的 HAP,系统蓝牙开关由用户控制
Web 不支持 保留类型一致的降级入口,核心 API 返回 9014001
微信小程序 支持 使用微信 BLE API;能力受微信基础库、手机系统和设备厂商实现约束
支付宝小程序 不支持 保留类型一致的降级入口,核心 API 返回 9014001

环境与安装

  • HBuilderX 5.07+
  • Android 5.0+(API 21+)
  • iOS 12.0+(仅前台 BLE Central 能力)
  • HarmonyOS NEXT(使用 ConnectivityKit)
  • 微信小程序(建议使用当前稳定基础库)
  • 通过 HBuilderX 将插件导入项目的 uni_modules/lizhao-ble
  • 页面和其他插件只能从插件根目录导入,不要导入 utssdk 内部文件
// 正确:从插件根目录导入。
import * as Ble from '@/uni_modules/lizhao-ble'

Android 调试必须使用包含本插件 Kotlin 混编代码、Manifest 权限和 UTS 生成物的自定义基座。标准基座或旧自定义基座不能承载新导入的原生代码。Swift 原生代码更新后必须重新制作并安装匹配的 iOS 自定义基座,更新 wgt 或 appResource 不能替换旧基座内的原生代码。

权限准备

插件已在 AndroidManifest.xml 声明所需权限,并会在首次打开适配器或启动扫描时主动发起对应的系统授权:

系统版本 运行时权限 用途
Android 12+ 且应用 targetSdkVersion >= 31 BLUETOOTH_SCAN 扫描附近 BLE 设备
Android 12+ 且应用 targetSdkVersion >= 31 BLUETOOTH_CONNECT 读取适配器状态、连接设备和 GATT 通信
Android 6–11,或 Android 12+ 且应用 targetSdkVersion < 31 ACCESS_FINE_LOCATION 系统对 BLE 扫描的兼容要求

Android 12+ 且项目 targetSdkVersion >= 31 时使用“附近设备”授权;旧 target 基座和 Android 6–11 使用定位授权兼容扫描。用户拒绝或永久拒绝时,插件进入 fail 并返回 9014013,不会绕过系统授权。项目也可以在调用插件前自行完成授权。

现代 Android 版本通常不允许普通应用静默打开系统蓝牙。如果蓝牙关闭,请先引导用户在系统设置或系统授权界面中打开蓝牙,再调用插件 API。

iOS 已声明蓝牙用途说明。首次访问蓝牙时由系统弹出授权;插件不能绕过授权,也不能代替用户打开或关闭系统蓝牙开关。插件只在本机内存中处理扫描结果、设备标识和通信数据,不采集业务数据,不上传蓝牙数据。

HarmonyOS 需要 ohos.permission.ACCESS_BLUETOOTH,并使用包含本插件原生代码的 HAP;插件不会静默打开或关闭系统蓝牙。微信小程序需在小程序后台和隐私合规配置中按业务实际声明蓝牙用途,授权与系统蓝牙状态以微信客户端回调为准。

最小可运行示例

uni-app(Vue2 / Vue3)

<script>
import * as Ble from '@/uni_modules/lizhao-ble'

export default {
  onLoad() {
    // 先注册监听,避免漏掉扫描开始后的首批设备。
    Ble.onBluetoothDeviceFound((devices) => {
      console.log('发现 BLE 设备', devices)
    })

    // 插件会按 Android 系统版本和项目 targetSdkVersion 主动申请所需权限。
    Ble.openBluetoothAdapter({
      success: () => {
        Ble.startBluetoothDevicesDiscovery({
          allowDuplicatesKey: false,
          success: (res) => {
            console.log('扫描已启动', res)
          },
          fail: (err) => {
            console.log('扫描失败', err)
          }
        })
      },
      fail: (err) => {
        console.log('打开蓝牙适配器失败', err)
      }
    })
  },
  onUnload() {
    // 页面销毁时停止扫描并清理监听,避免持续占用蓝牙资源。
    Ble.stopBluetoothDevicesDiscovery({})
    Ble.offBluetoothDeviceFound()
    Ble.closeBluetoothAdapter({})
  }
}
</script>

uni-app x(UVUE)

<script setup lang="uts">
import {
  openBluetoothAdapter,
  startBluetoothDevicesDiscovery,
  onBluetoothDeviceFound,
  offBluetoothDeviceFound,
  stopBluetoothDevicesDiscovery
} from '@/uni_modules/lizhao-ble'
import type {
  OpenBluetoothAdapterOptions,
  StartBluetoothDevicesDiscoveryOptions,
  StopBluetoothDevicesDiscoveryOptions
} from '@/uni_modules/lizhao-ble'

// 类型只从插件根目录导入,避免依赖插件内部文件结构。
class BleDemoOptions {
  success?: (res: any) => void
  fail?: (err: any) => void
  complete?: (res: any) => void
  allowDuplicatesKey?: boolean
}

onLoad(() => {
  onBluetoothDeviceFound((devices) => {
    console.log('发现 BLE 设备', devices)
  })

  const openOptions = new BleDemoOptions()
  openOptions.success = (_res: any) => {
    const scanOptions = new BleDemoOptions()
    scanOptions.allowDuplicatesKey = false
    scanOptions.fail = (err: any) => {
      console.log('扫描失败', err)
    }
    startBluetoothDevicesDiscovery(scanOptions as StartBluetoothDevicesDiscoveryOptions)
  }
  openOptions.fail = (err: any) => {
    console.log('打开蓝牙适配器失败', err)
  }
  openBluetoothAdapter(openOptions as OpenBluetoothAdapterOptions)
})

onUnload(() => {
  const stopOptions = new BleDemoOptions()
  stopBluetoothDevicesDiscovery(stopOptions as StopBluetoothDevicesDiscoveryOptions)
  offBluetoothDeviceFound()
})
</script>

推荐调用顺序

  1. Android 由插件在首次打开适配器或启动扫描时申请当前系统版本所需权限;iOS 由系统在首次使用时请求蓝牙授权。
  2. 注册 onBluetoothDeviceFoundonBLEConnectionStateChange 等监听器。
  3. 调用 openBluetoothAdapter
  4. 调用 startBluetoothDevicesDiscovery,拿到目标 deviceId 后停止扫描。iOS 的 deviceId 不是 Android MAC,而是来自 CBPeripheral.identifier 的系统 UUID,必须使用本次扫描或系统检索返回的值。
  5. 调用 createBLEConnection
  6. 调用 getBLEDeviceServicesgetBLEDeviceCharacteristics
  7. 根据特征属性执行读取、写入或 notifyBLECharacteristicValueChange
  8. 页面退出时关闭通知、断开连接、停止扫描并移除监听器。

常见增强示例

自动重连

import * as Ble from '@/uni_modules/lizhao-ble'

// 仅在非主动断开时尝试有限次数重连。
Ble.createBLEConnection({
  deviceId: '从扫描结果取得的 deviceId',
  timeout: 10000,
  autoReconnect: true,
  reconnectAttempts: 3,
  reconnectInterval: 2000,
  success(res) {
    console.log('连接成功', res)
  },
  fail(err) {
    console.log('连接失败', err)
  }
})

自动重连只恢复系统连接状态,不自动恢复已经发现的 GATT 服务、特征或通知订阅。连接状态重新变为已连接后,业务必须再次调用 getBLEDeviceServicesgetBLEDeviceCharacteristics,并按需重新调用 notifyBLECharacteristicValueChange

MTU 与 RSSI

import * as Ble from '@/uni_modules/lizhao-ble'

// Android 可主动请求 MTU;iOS 不支持主动 MTU 协商,调用会 fail(9014001)。
Ble.requestBLEMTU({
  deviceId: '从扫描结果取得的 deviceId',
  mtu: 185,
  success(res) {
    console.log('协商后的 MTU', res.mtu)
  }
})

// RSSI 读取要求设备已经连接。
Ble.readBLEDeviceRSSI({
  deviceId: '从扫描结果取得的 deviceId',
  success(res) {
    console.log('当前 RSSI', res.RSSI)
  }
})

文本、Hex 与分包写入

import * as Ble from '@/uni_modules/lizhao-ble'

const target = {
  deviceId: '从扫描结果取得的 deviceId',
  serviceId: '0000fff0-0000-1000-8000-00805f9b34fb',
  characteristicId: '0000fff2-0000-1000-8000-00805f9b34fb'
}

// UTF-8 文本写入。
Ble.writeBLECharacteristicValueByText({
  ...target,
  text: 'ping'
})

// Hex 支持空格、冒号、短横线和 0x 前缀。
Ble.writeBLECharacteristicValueByHex({
  ...target,
  hex: '70 69 6e 67'
})

// 长数据按 20 字节串行写入,每包间隔 20 ms。
Ble.writeBLECharacteristicValueChunked({
  ...target,
  value: new TextEncoder().encode('long payload').buffer,
  chunkSize: 20,
  interval: 20
})

完整示例

  • uni-app:uni_modules/lizhao-ble/example/uniapp/ble.vue
  • uni-app x:uni_modules/lizhao-ble/example/uniappx/index.uvue

示例页会触发插件的 Android 系统授权流程,但不会绕过用户选择,也不能替代真实 BLE 外设验收。

稳定会话 API

会话层是可选能力,不会改变底层扫描、连接和特征 API。它适合“写入一条命令并等待通知响应”的设备协议;Android 与 iOS 均支持,且需要包含当前原生源码的自定义基座。

import {
  startBLESession,
  sendBLESessionRequest,
  onBLESessionData
} from '@/uni_modules/lizhao-ble'

onBLESessionData((event) => {
  console.log(event.direction, event.requestId, event.hex, event.matched)
})

startBLESession({
  deviceId: '扫描得到的设备标识',
  serviceId: '服务 UUID',
  writeCharacteristicId: '写特征 UUID',
  notifyCharacteristicId: '通知特征 UUID',
  autoReconnect: true,
  success(state) {
    console.log('会话已就绪', state.phase)
  }
})

sendBLESessionRequest({
  deviceId: '扫描得到的设备标识',
  requestId: 'query-status-1',
  encoding: 'hex',
  hex: 'A001',
  responseMode: 'hexPrefix',
  responseHex: 'A081',
  timeout: 10000,
  success(result) {
    console.log('收到匹配响应', result)
  }
})
API 说明
startBLESession(options) 建立/替换指定设备会话,并完成服务、特征和通知准备
sendBLESessionRequest(options) 提交每设备串行请求;支持 none / nextNotification / hexPrefix / hexEquals
cancelBLESessionRequest(options) 取消排队或当前等待响应请求;已交给系统的字节不声明撤回
stopBLESession(options) 主动停止会话并清理队列、计时器和重连
getBLESessionState(options) 获取单设备或全部会话只读快照
on/offBLESessionStateChange 监听/清理会话阶段、队列、RSSI 和错误状态
on/offBLESessionData 监听实际发送和接收数据,包含 requestId、Hex 与 matched

sendBLESessionRequestencodingtext 时使用 text,为 hex 时使用偶数长度 hex,为 buffer 时使用 value: ArrayBuffer。队列最多保留 100 项;断线时正在执行的请求失败且不会偷偷重发,尚未开始的排队请求可在有限重连恢复后继续。

iOS 闭包监听器无法稳定按对象身份比较,因此 offBLESessionStateChange(listener)offBLESessionData(listener) 无论是否传 listener,都会清空对应类别的全部监听器。

API 列表

分类 API
适配器 openBluetoothAdaptercloseBluetoothAdaptergetBluetoothAdapterState
扫描 startBluetoothDevicesDiscoverystopBluetoothDevicesDiscoverygetBluetoothDevicesgetConnectedBluetoothDevices
扫描监听 onBluetoothAdapterStateChangeoffBluetoothAdapterStateChangeonBluetoothDeviceFoundoffBluetoothDeviceFound
连接 createBLEConnectioncloseBLEConnectiononBLEConnectionStateChangeoffBLEConnectionStateChange
GATT getBLEDeviceServicesgetBLEDeviceCharacteristicsreadBLECharacteristicValuewriteBLECharacteristicValue
写入增强 writeBLECharacteristicValueByTextwriteBLECharacteristicValueByHexwriteBLECharacteristicValueChunked
链路增强 requestBLEMTUreadBLEDeviceRSSI
通知 notifyBLECharacteristicValueChangeonBLECharacteristicValueChangeoffBLECharacteristicValueChange
诊断 getCapabilitiesgetRuntimeState

通用回调参数

onXxx/offXxx 监听器外,异步 API 的 options 均支持以下回调:

参数 类型 必填 说明 默认值 可选参数
options.success function 操作成功时触发一次
options.fail function 操作失败时触发一次,参数为 BleFail
options.complete function success 或 fail 之后触发一次

适配器 API

openBluetoothAdapter(options)

说明

初始化插件管理的蓝牙适配器资源。调用前应已获得当前平台授权并确保系统蓝牙可用。

支持平台

Android 5.0+、iOS 12+ 前台、HarmonyOS NEXT、微信小程序;Web 与其他未实现平台通过 fail 返回 9014001

参数

参数 类型 必填 说明 默认值 可选参数
options OpenBluetoothAdapterOptions 打开参数 success / fail / complete

返回值

字段 类型 说明
available boolean 系统蓝牙是否可用

closeBluetoothAdapter(options)

说明

停止扫描、关闭当前连接并释放插件维护的适配器状态。

参数

参数 类型 必填 说明 默认值 可选参数
options CloseBluetoothAdapterOptions 关闭参数 success / fail / complete

返回值

字段 类型 说明
available boolean 关闭后的适配器可用状态

getBluetoothAdapterState(options)

说明

获取当前适配器和扫描状态。

参数

参数 类型 必填 说明 默认值 可选参数
options GetBluetoothAdapterStateOptions 查询参数 success / fail / complete

返回值

字段 类型 说明
available boolean 系统蓝牙是否可用
discovering boolean 当前是否正在扫描

扫描与设备 API

startBluetoothDevicesDiscovery(options)

说明

启动 BLE 扫描。名称筛选采用不区分大小写的包含匹配;服务 UUID 由 Android 扫描过滤器处理。

参数

参数 类型 必填 说明 默认值 可选参数
options.services Array<string> 按广播服务 UUID 过滤 [] UUID 字符串数组
options.allowDuplicatesKey boolean 是否持续回调重复设备 false true / false
options.filterNames Array<string> 按 name/localName 包含匹配 [] 名称关键字数组
options.fliterNames Array<string> filterNames 的旧拼写兼容字段 [] 名称关键字数组
options.interval number 兼容字段;Android 与 iOS 扫描 API 均无可保证一致效果的原生等价能力,不据此伪造扫描节流 0
options.powerLevel string 兼容字段;Android 与 iOS 无统一原生功率档位等价能力,当前不承诺改变系统扫描功率 high low / medium / high
options.scanComplete function 停止扫描成功时触发
options.scanComplate function scanComplete 的旧拼写兼容字段
options.success function 扫描成功启动时触发
options.fail function 扫描启动失败时触发
options.complete function 启动结果完成时触发

返回值

字段 类型 说明
discovering boolean 是否已进入扫描状态

stopBluetoothDevicesDiscovery(options)

说明

停止当前扫描,并在成功后触发 scanComplete/scanComplate

参数

参数 类型 必填 说明 默认值 可选参数
options.scanComplete function 停止成功后触发
options.scanComplate function 旧拼写兼容字段
options.success function 停止成功时触发
options.fail function 停止失败时触发
options.complete function 停止结果完成时触发

返回值

字段 类型 说明
discovering boolean 停止成功后为 false

getBluetoothDevices(options)

说明

返回插件本次运行期间已发现的设备列表。

参数 类型 必填 说明 默认值 可选参数
options GetBluetoothDevicesOptions 查询参数 success / fail / complete

返回值

字段 类型 说明
devices Array<BleDevice> 已发现设备列表

getConnectedBluetoothDevices(options)

说明

返回当前由插件维护的已连接设备列表。

参数 类型 必填 说明 默认值 可选参数
options.services Array<string> 兼容字段;当前 Android 返回插件维护的全部连接 [] 服务 UUID 数组
options.success function 查询成功时触发
options.fail function 查询失败时触发
options.complete function 查询完成时触发

返回值

字段 类型 说明
devices Array<BleDevice> 已连接设备列表

连接 API

createBLEConnection(options)

说明

连接目标设备,并可配置受控自动重连。

参数 类型 必填 说明 默认值 可选参数
options.deviceId string 扫描结果中的设备 ID
options.timeout number 连接超时,单位 ms 10000 大于 0
options.autoReconnect boolean 非主动断开后是否自动重连 false true / false
options.reconnectAttempts number 自动重连最大尝试次数 0 大于等于 0
options.reconnectInterval number 重连间隔,单位 ms 2000 大于等于 0
options.success function 连接成功时触发
options.fail function 连接失败或超时时触发
options.complete function 连接结果完成时触发

返回值

字段 类型 说明
deviceId string 已连接设备 ID
connected boolean 连接成功时为 true

closeBLEConnection(options)

参数 类型 必填 说明 默认值 可选参数
options.deviceId string 要断开的设备 ID
options.success function 断开成功时触发
options.fail function 断开失败时触发
options.complete function 断开结果完成时触发

返回值

字段 类型 说明
deviceId string 已断开设备 ID
connected boolean 断开成功时为 false

服务与特征 API

getBLEDeviceServices(options)

参数 类型 必填 说明 默认值 可选参数
options.deviceId string 已连接设备 ID
options.success function 服务发现成功时触发
options.fail function 服务发现失败时触发
options.complete function 操作完成时触发

返回值

字段 类型 说明
services Array<BleService> 服务列表,包含 uuid/isPrimary

getBLEDeviceCharacteristics(options)

参数 类型 必填 说明 默认值 可选参数
options.deviceId string 已连接设备 ID
options.serviceId string 服务 UUID
options.success function 特征发现成功时触发
options.fail function 特征发现失败时触发
options.complete function 操作完成时触发

返回值

字段 类型 说明
characteristics Array<BleCharacteristic> 特征列表及 read/write/notify 等属性

readBLECharacteristicValue(options)

参数 类型 必填 说明 默认值 可选参数
options.deviceId string 已连接设备 ID
options.serviceId string 服务 UUID
options.characteristicId string 可读特征 UUID
options.success function 读取成功时触发
options.fail function 读取失败时触发
options.complete function 操作完成时触发

返回值

字段 类型 说明
deviceId string 设备 ID
serviceId string 服务 UUID
characteristicId string 特征 UUID
value ArrayBuffer 读取到的原始字节
hex string value 相同内容的十六进制文本;uni-app 页面建议优先使用

writeBLECharacteristicValue(options)

参数 类型 必填 说明 默认值 可选参数
options.deviceId string 已连接设备 ID
options.serviceId string 服务 UUID
options.characteristicId string 可写特征 UUID
options.value ArrayBuffer 待写入原始字节
options.writeNoResponse boolean 是否优先使用无响应写入 false true / false
options.success function 写入成功时触发
options.fail function 写入失败时触发
options.complete function 操作完成时触发

Android uni-app 页面需要写入文本或十六进制数据时,优先使用 writeBLECharacteristicValueByTextwriteBLECharacteristicValueByHex;这样不依赖页面与 UTS 插件之间的 ArrayBuffer 入参桥接。

写入增强 API

writeBLECharacteristicValueByText(options)

writeBLECharacteristicValue 的设备、服务、特征和回调参数基础上,使用以下字段:

参数 类型 必填 说明 默认值 可选参数
options.text string 按 UTF-8 编码写入的文本
options.writeNoResponse boolean 是否优先使用无响应写入 false true / false

writeBLECharacteristicValueByHex(options)

参数 类型 必填 说明 默认值 可选参数
options.hex string 十六进制文本 可包含空格、冒号、短横线、0x
options.writeNoResponse boolean 是否优先使用无响应写入 false true / false

writeBLECharacteristicValueChunked(options)

参数 类型 必填 说明 默认值 可选参数
options.deviceId string 已连接设备 ID
options.serviceId string 服务 UUID
options.characteristicId string 可写特征 UUID
options.value ArrayBuffer 待分包数据
options.chunkSize number 每包字节数 20 1-512
options.interval number 包间隔,单位 ms 0 大于等于 0
options.writeNoResponse boolean 是否优先使用无响应写入 false true / false
options.success function 全部分包写完后触发
options.fail function 任一分包失败时触发
options.complete function 整体操作结束时触发

Android uni-app 页面无法直接向 UTS 插件传入 ArrayBuffer,因此本接口应在 uni-app x 或支持该桥接的平台调用。Android uni-app 的长文本 / Hex 数据可使用稳定会话的 sendBLESessionRequest,通过 encodingchunkSize 让插件原生层完成分包。

返回值

字段 类型 说明
chunks number 实际成功写入的分包数量

链路增强 API

requestBLEMTU(options)

参数 类型 必填 说明 默认值 可选参数
options.deviceId string 已连接设备 ID
options.mtu number 期望 MTU 23-517
options.success function 协商成功时触发
options.fail function 协商失败时触发
options.complete function 操作完成时触发

返回值

字段 类型 说明
deviceId string 设备 ID
mtu number 系统和外设最终协商结果

readBLEDeviceRSSI(options)

参数 类型 必填 说明 默认值 可选参数
options.deviceId string 已连接设备 ID
options.success function 读取成功时触发
options.fail function 读取失败时触发
options.complete function 操作完成时触发

返回值

字段 类型 说明
deviceId string 设备 ID
RSSI number 当前接收信号强度

通知 API

notifyBLECharacteristicValueChange(options)

参数 类型 必填 说明 默认值 可选参数
options.deviceId string 已连接设备 ID
options.serviceId string 服务 UUID
options.characteristicId string notify/indicate 特征 UUID
options.state boolean true 开启,false 关闭 true / false
options.success function 设置成功时触发
options.fail function 设置失败时触发
options.complete function 操作完成时触发

监听 API

监听器均持续有效,直到调用对应 offXxx。Android 可按插件实现移除监听;iOS 调用 offXxx(listener) 会清空该类监听,因为 Swift 闭包不能安全依赖跨语言相等比较。offXxx() 不传 listener 时同样清空该类全部监听器。

API listener 类型 事件参数 释放方式
onBluetoothAdapterStateChange(listener) (BleAdapterState) => void available/discovering offBluetoothAdapterStateChange(listener?)
offBluetoothAdapterStateChange(listener?) 可选 不传参数时清空全部适配器监听
onBluetoothDeviceFound(listener) (Array<BleDevice>) => void 本批发现设备 offBluetoothDeviceFound(listener?)
offBluetoothDeviceFound(listener?) 可选 不传参数时清空全部设备监听
onBLEConnectionStateChange(listener) (BleConnectionState) => void 连接状态、时间、MTU offBLEConnectionStateChange(listener?)
offBLEConnectionStateChange(listener?) 可选 不传参数时清空全部连接监听
onBLECharacteristicValueChange(listener) (BleCharacteristicValue) => void 设备/服务/特征/value/hex;uni-app 页面建议优先读取 hex offBLECharacteristicValueChange(listener?)
offBLECharacteristicValueChange(listener?) 可选 不传参数时清空全部特征监听

诊断 API

getCapabilities(options)

参数 类型 必填 说明 默认值 可选参数
options GetCapabilitiesOptions 能力查询参数 success / fail / complete

返回值

字段 类型 说明
supported boolean 当前设备是否具备 BLE Central 能力
platform string 当前平台标识
adapter boolean 适配器能力
discovery boolean 扫描能力
connection boolean 连接能力
serviceDiscovery boolean 服务发现能力
characteristicDiscovery boolean 特征发现能力
read boolean 特征读取能力
write boolean 特征写入能力
notify boolean 通知订阅能力
mtu boolean MTU 协商能力
rssi boolean RSSI 读取能力
chunkedWrite boolean 分包写入能力
textWrite boolean 文本写入能力
hexWrite boolean Hex 写入能力
autoReconnect boolean 自动重连能力
multiConnection boolean 多连接能力
session boolean 稳定会话、串行请求和通知响应匹配能力
requiresCustomBase boolean App 调试是否需要自定义基座
restrictedReason string 不支持时的原因

getRuntimeState(options)

参数 类型 必填 说明 默认值 可选参数
options GetRuntimeStateOptions 运行态查询参数 success / fail / complete

返回值

字段 类型 说明
adapterState BleAdapterState 适配器与扫描状态
knownDevices Array<BleDevice> 当前进程已发现设备
connectedDeviceIds Array<string> 当前连接设备 ID
notificationSubscriptions Array<BleNotifySubscription> 当前通知订阅
lastError BleFail | null 最近一次插件错误
lastUpdatedAt number 最近更新时间戳

兼容别名

兼容别名与规范 API 参数、回调和平台边界完全相同。新项目建议使用规范 API。

兼容别名 规范 API
openBtBluetooth openBluetoothAdapter
closeBtBluetooth closeBluetoothAdapter
startScanBle startBluetoothDevicesDiscovery
stopScanBle stopBluetoothDevicesDiscovery
onBluetoothFound onBluetoothDeviceFound
offBluetoothFound offBluetoothDeviceFound
connectBle createBLEConnection
disconnectBle closeBLEConnection
getConnectedBluetoothServices getBLEDeviceServices
getConnectedBluetoothCharacteristics getBLEDeviceCharacteristics

错误码

错误码 含义 说明
9014001 platform unsupported 当前平台、设备能力或 App 上下文不支持
9014002 invalid options 必填参数缺失、MTU/Hex/分包参数非法
9014003 bluetooth adapter unavailable 系统蓝牙适配器不可用
9014004 bluetooth adapter not opened 尚未初始化或打开适配器
9014005 start discovery failed 启动扫描失败
9014006 stop discovery failed 停止扫描失败
9014007 BLE connection failed 连接、断开或重连失败
9014008 BLE service not found 服务发现失败或服务不存在
9014009 BLE characteristic not found 特征发现失败或特征不存在
9014010 read characteristic failed 特征值或 RSSI 读取失败
9014011 write characteristic failed 写入、分包写入或 MTU 协商失败
9014012 notify characteristic failed 通知订阅设置失败
9014013 permission denied Android 蓝牙或位置运行时权限不足
9014014 operation timeout BLE 操作超时
9014015 system error 系统蓝牙调用或适配器关闭失败
9014016 session not found 指定设备会话不存在
9014017 session not ready 会话尚未完成连接、发现或通知准备
9014018 request cancelled 请求被主动取消或因连接中断终止
9014019 response timeout 等待匹配通知响应超时
9014020 duplicate request 同一会话的 requestId 重复
9014021 session queue full 单设备会话队列已达到 100 项上限

失败对象包含 errSubject='lizhao-ble'errCodeerrMsg 和可选 details/data

自定义基座与发布

  • 首次导入插件、升级 Kotlin 原生代码或权限后,需要重新制作 Android 自定义基座。
  • Swift 原生代码更新后必须重新制作并安装匹配的 iOS 自定义基座;仅更新页面、wgt 或 appResource 不能替换旧基座中的 Swift。
  • 仅更新 wgt/appResource 不能替换旧基座中已经编译的 UTS/Kotlin/Swift 原生代码。
  • 正式发布 App 时,使用当前插件源码重新执行原生联编或云打包。
  • iOS 能力发布前建议在 iOS 12+ 真机与真实 BLE 外设完成扫描、连接、GATT、通知、RSSI、分包、回调次数和前台有限自动重连验收;源码守卫或生成 Swift 不能代替真机证据。
  • 付费插件试用需要使用与当前 appid、包名匹配的自定义基座;旧工程或其他账号生成的基座不能作为当前试用证据。

注意事项

  • BLE 外设协议并不统一;服务 UUID、特征 UUID、字节序、校验、分包和响应规则由具体设备协议决定。
  • chunkSize=20 是兼容默认值。协商更大 MTU 后,仍应按外设实际可接受长度设置分包大小。
  • writeNoResponse=true 只适用于声明 writeWithoutResponse 的特征;不支持时应改用有响应写入。
  • 无响应写入的 success 仅表示系统接受发送请求,不代表外设已经接收、校验或执行指令;需要业务确认时应设计通知或读取回执。
  • iOS 不支持主动 MTU 协商,requestBLEMTU 会返回 9014001;分包上限由 CoreBluetooth 当前连接自动给出。
  • 系统蓝牙开关不能由插件关闭;closeBluetoothAdapter 只释放插件管理的扫描、连接、定时器和监听状态。
  • 自动重连仅处理非主动断开;主动调用 closeBLEConnectioncloseBluetoothAdapter 会清理重连状态。
  • 页面销毁时应停止扫描、关闭不再使用的通知和连接,并移除持续监听器。
  • 自动编译不能替代 Android 真机与真实 BLE 外设验收。

作者系列 UTS 插件

以下为已在 DCloud 插件市场上架的作者系列 UTS 插件,可按业务场景组合使用。未列出的插件表示当前未确认公开市场页,后续上架后再补充。

插件 能力方向 插件市场
lizhao-nfc-pro NFC 标签读写、NDEF、IsoDep 与诊断 查看插件
lizhao-float-window 悬浮窗、画中画、权限与诊断 查看插件
lizhao-device-id 设备标识、隐私策略与诊断 查看插件
lizhao-scan-pro 原生扫码、连续扫码、相册识别 查看插件
lizhao-choose-file 原生文件选择、上传、进度与取消 查看插件
lizhao-bg-audio 背景音频播放、队列、倍速与事件 查看插件
lizhao-smart-tts 系统 TTS、云端合成、听书方案 查看插件
lizhao-share-plus 系统分享、远程文件下载后分享 查看插件
lizhao-sqlite-pro 原生 SQLite、迁移、备份与诊断 查看插件
lizhao-icon-pro SVG 图标组件、多主题与缓存 查看插件
lizhao-cast-screen DLNA 投屏、AirPlay 路由入口 查看插件
lizhao-call-kit 电话、短信、通讯录原生能力 查看插件
lizhao-app-keepalive 应用保活、唤醒、自愈与报告 查看插件
lizhao-doc-corrector 文档扫描、矫正、增强与识别 查看插件
lizhao-emu-detect 模拟器环境检测、风险评分与证据 查看插件
lizhao-gallery-pro 相册媒体分页、筛选、缩略图与导出 查看插件
lizhao-video-thumb 视频封面、批量取帧与 Base64 返回 查看插件
lizhao-ble BLE 扫描、连接、读写、通知与自动重连 查看插件
lizhao-sse-pro SSE、Line、JSONL 与 Raw 流式请求 查看插件
lizhao-pdf-pro PDF 阅读、签批、真实写回与页面处理 查看插件
lizhao-serial-port 路径串口、USB 串口、多会话收发与诊断 查看插件
lizhao-wechat-kit 微信登录、分享、支付、小程序与客服 查看插件
lizhao-video-editor 视频裁剪、压缩、取帧与 FFmpeg/FFprobe 查看插件
lizhao-vpn-pro 企业 VPN、IKEv2、安全接入与脱敏诊断 查看插件

隐私、权限声明

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

Android 12+ 需要 BLUETOOTH_SCAN、BLUETOOTH_CONNECT;Android 11 及以下扫描可能需要 ACCESS_FINE_LOCATION;HarmonyOS 需要 ohos.permission.ACCESS_BLUETOOTH;iOS 与微信小程序由平台在首次使用时处理蓝牙授权。

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

插件不采集、不存储、不上传用户数据;扫描结果、设备标识和特征值仅在当前应用进程内由业务代码处理。

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