uni-app中uni.onBluetoothDeviceFound捕捉不到ManufacturerData
uni-app中uni.onBluetoothDeviceFound捕捉不到ManufacturerData
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | 22H2 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
PC开发环境操作系统版本号:22H2
HBuilderX类型:正式
HBuilderX版本号:4.07
手机系统:Android
手机系统版本号:Android 14
手机厂商:小米
手机机型:小米14
页面类型:vue
vue版本:vue2
打包方式:云端
项目创建方式:HBuilderX
示例代码:
```onLoad() {
uni.openBluetoothAdapter({
success(res) {
console.log('蓝牙开启:' + JSON.stringify(res))
uni.startBluetoothDevicesDiscovery({
success(res) {
console.log(res)
}
})
}
})
uni.onBluetoothDeviceFound(function(devices) {
console.log(JSON.stringify(devices))
console.log(this.ab2hex(devices[0].advertisData))
})
}
操作步骤:
使用代码即可复现
预期结果:
能完全检测到蓝牙的广播数据
实际结果:
蓝牙全部广播数据
bug描述:
使用蓝牙接口无法捕捉到ManufacturerData
{"devices":[{"deviceId":"C0:4E:30:F1:16:72","name":"知无科技","RSSI":-47,"localName":"知无科技","advertisServiceUUIDs":[],"advertisData":{}}]}
但是用其他蓝牙调试工具是可以找到的

更多关于uni-app中uni.onBluetoothDeviceFound捕捉不到ManufacturerData的实战教程也可以访问 https://www.itying.com/category-93-b0.html
解决了吗铁子
更多关于uni-app中uni.onBluetoothDeviceFound捕捉不到ManufacturerData的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在 uni-app 中使用 uni.onBluetoothDeviceFound 监听蓝牙设备时,如果无法捕获到 ManufacturerData,可能是因为以下几个原因:
1. 设备未广播 ManufacturerData
蓝牙设备在广播数据时,并不一定会包含 ManufacturerData。只有当设备在广播数据中包含 ManufacturerData 时,才能在 uni.onBluetoothDeviceFound 回调中获取到该信息。
2. 平台兼容性问题
uni-app 的蓝牙 API 底层依赖于各平台的原生实现(如微信小程序、H5、App等),不同平台对蓝牙广播数据的解析方式可能有所不同,导致 ManufacturerData 在某些平台上无法获取。
3. 数据格式问题
ManufacturerData 是一个字节数组,可能需要按照特定的格式解析。如果解析方式不正确,可能会导致获取失败。
4. 权限问题
在某些平台上,获取蓝牙设备的详细数据可能需要额外的权限。请确保已经正确配置了权限。
解决方法
1. 检查设备广播数据
确保蓝牙设备在广播数据中包含 ManufacturerData。可以使用其他蓝牙调试工具(如 nRF Connect)来检查设备的广播数据。
2. 检查平台兼容性
在不同平台上测试代码,确认是否是平台兼容性问题。如果某些平台无法获取 ManufacturerData,可以尝试使用平台特定的 API 来获取数据。
3. 解析 ManufacturerData
如果能够获取到 ManufacturerData,但无法正确解析,可以尝试以下方式:
uni.onBluetoothDeviceFound(function(devices) {
devices.forEach(device => {
if (device.advertisData) {
// advertisData 是一个 ArrayBuffer,需要转换为字节数组
const advertisData = new Uint8Array(device.advertisData);
console.log('ManufacturerData:', advertisData);
}
});
});
4. 检查权限
在 App 端,确保已经获取了蓝牙相关的权限。在 manifest.json 中配置:
{
"app-plus": {
"permissions": [
"android.permission.BLUETOOTH",
"android.permission.BLUETOOTH_ADMIN",
"android.permission.ACCESS_FINE_LOCATION"
]
}
}
在微信小程序中,确保已经获取了 scope.bluetooth 权限。
示例代码
uni.startBluetoothDevicesDiscovery({
success: function(res) {
console.log('开始发现设备');
uni.onBluetoothDeviceFound(function(devices) {
devices.forEach(device => {
if (device.advertisData) {
const advertisData = new Uint8Array(device.advertisData);
console.log('设备名称:', device.name);
console.log('设备信号强度:', device.rssi);
console.log('ManufacturerData:', advertisData);
}
});
});
},
fail: function(err) {
console.log('发现设备失败', err);
}
});

