更新记录
1.0.0(2026-03-19)
- 扫描附近 BLE 设备
- 连接设备
- 发现服务和特征
- 原始读写
- 通知订阅
- Android MTU 调整
平台兼容性
uni-app(4.75)
| Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| × |
× |
× |
× |
√ |
√ |
√ |
√ |
√ |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| × |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
uni-app x(4.75)
| Chrome |
Safari |
Android |
iOS |
鸿蒙 |
微信小程序 |
| × |
× |
√ |
√ |
√ |
√ |
点击“试用插件”即可直接体验 BLE 通信模板页
试用页面就是插件同级目录下的 index.vue。
页面里已经包含:
- 蓝牙状态和权限检查
- 扫描附近 BLE 设备
- 连接设备
- 服务与特征发现
- 原始读写
- 通知订阅
- Android MTU 调整
功能特性
- 支持 Android / iOS App 作为 BLE Central 扫描附近设备
- 支持连接 BLE GATT 设备并发现服务、特征
- 支持读取特征值、写入特征值、通知订阅
- 支持原始 HEX / UTF-8 文本调试
- 支持 Android 请求 MTU
- 附带完整模板页,方便没有真实协议时先验证通信链路
适用场景
- 智能灯、门锁、插座、传感器
- 体脂秤、血压计、温度计
- 医疗或工业小设备
- 任何需要 App 和 BLE 外设交换业务数据的场景
这版只做 BLE GATT 通信层,不做:
- 经典蓝牙
- 蓝牙耳机 / 键盘 / 鼠标
- 手机作为蓝牙外设
- 后台长连
- 具体设备协议
安装
将 uni_modules/austin-ble 复制到项目的 uni_modules 目录下。
权限说明
Android
BLUETOOTH
BLUETOOTH_ADMIN
ACCESS_FINE_LOCATION
BLUETOOTH_SCAN
BLUETOOTH_CONNECT
iOS
NSBluetoothAlwaysUsageDescription
NSBluetoothPeripheralUsageDescription
原生权限或 manifest.json 修改后,需要重新编译并重新安装 App / 自定义基座。
API
方法
| 方法名 |
说明 |
getBleStatus() |
获取当前 BLE 状态 |
requestBlePermissions(options) |
申请或检查 BLE 权限 |
openBluetoothSettings() |
打开系统蓝牙相关设置 |
startBleScan(options) |
开始扫描附近 BLE 设备 |
stopBleScan() |
停止扫描 |
connectBleDevice(options) |
连接 BLE 设备 |
disconnectBleDevice(options) |
断开 BLE 设备 |
discoverBleServices(options) |
发现设备服务列表 |
discoverBleCharacteristics(options) |
发现服务下的特征列表 |
readBleCharacteristicValue(options) |
读取特征值 |
writeBleCharacteristicValue(options) |
写入特征值 |
setBleCharacteristicNotify(options) |
开启或关闭通知订阅 |
requestBleMtu(options) |
请求调整 MTU |
onBleScanResult(callback) |
监听扫描结果 |
onBleConnectionChange(callback) |
监听连接状态变化 |
onBleCharacteristicValueChange(callback) |
监听特征值通知 |
onBleStateChange(callback) |
监听蓝牙状态变化 |
常用参数
startBleScan(options)
| 参数名 |
类型 |
是否必填 |
说明 |
serviceUuids |
string[] |
否 |
按服务 UUID 过滤扫描结果 |
allowDuplicatesKey |
boolean |
否 |
是否允许重复上报设备,默认 false |
success |
(res:any)=>void |
否 |
成功回调 |
fail |
(res:any)=>void |
否 |
失败回调 |
connectBleDevice(options)
| 参数名 |
类型 |
是否必填 |
说明 |
deviceId |
string |
是 |
设备唯一标识 |
success |
(res:any)=>void |
否 |
成功回调 |
fail |
(res:any)=>void |
否 |
失败回调 |
discoverBleCharacteristics(options)
| 参数名 |
类型 |
是否必填 |
说明 |
deviceId |
string |
是 |
设备唯一标识 |
serviceId |
string |
是 |
服务 UUID |
success |
(res:any)=>void |
否 |
成功回调 |
fail |
(res:any)=>void |
否 |
失败回调 |
writeBleCharacteristicValue(options)
| 参数名 |
类型 |
是否必填 |
说明 |
deviceId |
string |
是 |
设备唯一标识 |
serviceId |
string |
是 |
服务 UUID |
characteristicId |
string |
是 |
特征 UUID |
value |
string |
是 |
要写入的数据 |
encoding |
string |
否 |
hex 或 utf8,默认 hex |
writeType |
string |
否 |
withResponse 或 withoutResponse |
setBleCharacteristicNotify(options)
| 参数名 |
类型 |
是否必填 |
说明 |
deviceId |
string |
是 |
设备唯一标识 |
serviceId |
string |
是 |
服务 UUID |
characteristicId |
string |
是 |
特征 UUID |
state |
boolean |
是 |
true 开启通知,false 关闭通知 |
返回值字段
通用返回
| 字段 |
类型 |
说明 |
ok |
boolean |
是否成功 |
platform |
string |
平台,android 或 ios |
action |
string |
当前操作名 |
deviceId |
string |
设备唯一标识 |
serviceId |
string |
服务 UUID |
characteristicId |
string |
特征 UUID |
errCode |
number |
错误码,成功时一般为 0 |
errMsg |
string |
错误信息 |
note |
string |
当前操作说明 |
getBleStatus() 返回字段
| 字段 |
类型 |
说明 |
supported |
boolean |
是否支持 BLE |
enabled |
boolean |
系统蓝牙是否开启 |
authorized |
boolean |
蓝牙权限是否可用 |
scanning |
boolean |
当前是否扫描中 |
permissionState |
string |
权限状态 |
adapterState |
string |
蓝牙开关状态 |
supportsMtu |
boolean |
是否支持 MTU 调整 |
supportsOpenSettings |
boolean |
是否支持打开系统设置 |
notes |
string |
当前状态说明 |
扫描结果字段
| 字段 |
类型 |
说明 |
deviceId |
string |
设备唯一标识 |
name |
string |
设备名称 |
localName |
string |
本地广播名称 |
rssi |
number |
信号强度 |
connectable |
boolean |
当前广播是否标记为可连接 |
isConnected |
boolean |
当前页面内记录的连接状态 |
serviceUuids |
string[] |
广播里的服务 UUID 列表 |
manufacturerData |
string |
厂商数据,HEX 文本 |
服务字段
| 字段 |
类型 |
说明 |
deviceId |
string |
设备唯一标识 |
serviceId |
string |
服务 UUID |
isPrimary |
boolean |
是否主服务 |
特征字段
| 字段 |
类型 |
说明 |
deviceId |
string |
设备唯一标识 |
serviceId |
string |
服务 UUID |
characteristicId |
string |
特征 UUID |
properties |
string[] |
特征支持能力,如 read、write、notify |
descriptors |
string[] |
描述符 UUID 列表 |
读写结果字段
| 字段 |
类型 |
说明 |
valueHex |
string |
原始 HEX 结果 |
valueText |
string |
按 UTF-8 解码后的文本 |
bytesLength |
number |
数据字节长度 |
MTU 结果字段
| 字段 |
类型 |
说明 |
mtu |
number |
实际 MTU 值 |
使用示例
<script>
import {
requestBlePermissions,
startBleScan,
onBleScanResult,
connectBleDevice,
discoverBleServices,
discoverBleCharacteristics,
readBleCharacteristicValue,
} from '@/uni_modules/austin-ble'
export default {
methods: {
setupBle() {
requestBlePermissions({
success: () => {
startBleScan()
},
fail: (res) => {
uni.showToast({ title: res && res.errMsg ? res.errMsg : '蓝牙权限不可用', icon: 'none' })
},
})
onBleScanResult((device) => {
console.log('scan device', device)
})
},
connectAndRead(deviceId, serviceId, characteristicId) {
connectBleDevice({
deviceId,
success: () => {
discoverBleServices({ deviceId })
discoverBleCharacteristics({
deviceId,
serviceId,
success: () => {
readBleCharacteristicValue({
deviceId,
serviceId,
characteristicId,
success: (res) => {
console.log('read result', res)
},
})
},
})
},
})
},
},
}
</script>
试用方法
- 点击“试用插件”
- 先点“申请权限”
- 点击“开始扫描”
- 选中一个可连接设备并尝试连接
- 读取服务与特征
- 对支持
read / write / notify 的特征做原始调试
注意事项
- 附近很多普通 BLE 设备只能短连接,读完标准信息后可能会主动断开,这是正常设备行为。
- 插件解决“扫描、连接、收发数据”,具体写什么指令、是否鉴权、是否允许控制,取决于真实设备协议。
requestBleMtu 主要用于后续长数据通信,普通读设备名、读标准信息时通常不需要。