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);
}
});