Skip to content

Android ios 鸿蒙 ble低功耗蓝牙周边服务蓝牙服务端

插件 ID: 28323
来源: https://ext.dcloud.net.cn/plugin?id=28323
Android ios 鸿蒙 ble 蓝牙服务端 Android ios 等手机均可连接 注意此为服务端 ble 蓝牙服务端


更新记录

                                                    1.0.4(2026-06-11)

优化

平台兼容性

uni-app(4.03)

| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 | | |

  • |
  • |
  • |
  • | √ | √ | 5.0 | √ | √ | | | 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 | | |
  • |
  • |
  • |
  • |
  • |
  • |
  • |
  • |
  • |
  • |
  • |
  • | |

uni-app x(3.97)

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

  • |
  • | 5.0 | √ | √ |
  • | |

其他

| 多语言 | 暗黑模式 | 宽屏模式 | | | √ | × | √ | |

xtf-bleserver

BLE 低功耗蓝牙服务端插件,当前已提供 AndroidiOSHarmonyOS 的 App 端实现。 说明:

  • 这是 BLE 外设/服务端插件,适合让手机、开发板或模拟设备作为 BLE Server 对外广播。
  • 插件依赖原生能力,调试和运行请使用自定义基座。
  • 当前对外 API 已改为 export function 形式,不再使用 xtf 类静态方法。

支持平台

  • uni-app x App Android
  • uni-app x App iOS
  • uni-app x App HarmonyOS

使用前准备

  • 选择试用并绑定项目 appid
  • 下载插件到本地项目。
  • 云打包生成自定义基座。
  • 运行时选择对应平台的自定义基座。
  • 如果之前装过旧基座,先卸载再安装新基座。

导出 API

import {
  RecData,
  prepare,
  start,
  stop,
  sendBackDataToClient
} from '@/uni_modules/xtf-bleserver'

prepare(name, callback)

初始化 BLE 服务端。

  • name: string 广播名称
  • callback: (res: boolean) => void 初始化结果回调

start(callback, callState)

开始广播并监听客户端写入与连接状态变化。

  • callback: (data: RecData) => void 收到客户端写入数据时触发
  • callState: (mac: string, state: number) => void 连接状态变化时触发

stop()

停止 BLE 广播。

sendBackDataToClient(data)

向当前连接的客户端回发数据。

  • data: string 16 进制字符串,例如 AABBCCDD

数据结构

export type RecData = {
  mac: string
  data: string
}

字段说明:

  • mac:客户端标识
  • data:收到的数据,格式为 16 进制字符串

uni-app x 示例

import {
  RecData,
  prepare,
  sendBackDataToClient,
  start,
  stop
} from '@/uni_modules/xtf-bleserver'
prepare('ble', function(res:boolean) {
  console.log('prepare', res)
})
start(function(data: RecData) {
  console.log('receive', data)
  // 收到什么回什么
  sendBackDataToClient(data.data)
}, function(mac: string, state: number) {
  console.log('state', mac, state)
})
stop()

连接状态说明

当前插件透传底层状态值,不同平台含义可能略有差异,实际请以真机测试为准。

UUID 说明

  • Service UUID: 000000FF-0000-1000-8000-00805F9B34FB
  • Write UUID: 0000FE01-0000-1000-8000-00805F9B34FB
  • Notify UUID: 0000FE03-0000-1000-8000-00805F9B34FB 当前 Android、iOS 与 HarmonyOS 已统一使用同一套 UUID,客户端可按同一规则接入。

客户端如何连接

客户端连接本插件时,可按下面顺序处理:

  • 扫描广播,按广播名或 Service UUID 000000FF-0000-1000-8000-00805F9B34FB 过滤设备。
  • 连接设备后,发现 Service UUID 000000FF-0000-1000-8000-00805F9B34FB
  • 找到写入特征 0000FE01-0000-1000-8000-00805F9B34FB,将业务数据按 16 进制对应的字节写入。
  • 找到通知特征 0000FE03-0000-1000-8000-00805F9B34FB,先订阅通知。
  • 服务端收到写入后,如果调用了 sendBackDataToClient(...),客户端会从通知特征收到回包。 约定说明:
  • 插件回调中的 data 是大写 16 进制字符串。
  • sendBackDataToClient(data) 也要求传入 16 进制字符串,长度应为偶数。
  • 如果客户端未订阅 Notify 特征,服务端回发数据不会到达客户端。
  • iOS 侧回调中的 mac 实际是中心设备标识字符串,不是物理 MAC。
  • HarmonyOS 侧存在已知兼容性差异:部分 BLE 客户端在“订阅通知”步骤可能返回失败或显示失败,但服务端与客户端之间仍可正常收发消息,实际请以是否收到通知数据为准。

平台差异说明

Android

  • 会尝试设置蓝牙广播名称。
  • 依赖原生 AAR,必须使用自定义基座。
  • 当前已内置 16 进制字符串与 ByteArray 的转换逻辑。

iOS

  • iOS 返回的 mac 实际是 CBCentral.identifier.uuidString,不是物理 MAC 地址。
  • iOS 不能像 Android 一样直接修改系统蓝牙名称,prepare(name) ���用的是广播包本地名称。
  • sendBackDataToClient 依赖客户端已订阅通知特征后才能正常回发。
  • 同样需要自定义基座与蓝牙权限配置。

HarmonyOS

  • 当前为基于原生混编 .ets 的最小实现。
  • 对外 API 与 Android、iOS 保持一致:preparestartstopsendBackDataToClient
  • mac 字段在 HarmonyOS 侧同样表示连接端标识,不保证是物理 MAC 地址。
  • 需要鸿蒙蓝牙权限声明,插件内已补 app-harmony/module.json5,并会在 prepare(...) 时主动申请蓝牙权限。
  • 由于本地知识库缺少完整 BLE Peripheral 权威样例,个别底层事件名与签名需要以真实编译结果为准。
  • 当前已确认存在订阅状态兼容性差异:某些鸿蒙 BLE 客户端连接服务端后,订阅 Notify 特征时可能提示失败,但实际仍可以正常接收服务端回发的数据,也可以继续向服务端写入数据。
  • 因此在 HarmonyOS 场景下,建议业务侧不要只依赖“订阅调用返回值”判断是否可用,应结合真实消息收发结果共同判断。

注意事项

  • App 平台蓝牙能力必须在真机测试。
  • 使用前请确认系统蓝牙已开启。
  • Android 首次运行会申请蓝牙相关权限。
  • 发送数据时请传入合法偶数长度的 16 进制字符串。
  • 无客户端连接或客户端未订阅通知时,回发数据可能无效。
  • HarmonyOS 平台如遇到“订阅通知失败”但仍能正常收到消息,属于当前已知兼容性现象,不代表数据链路不可用。

开发文档

MIT Licensed