uni-app onBluetoothDeviceFound 不触发了
uni-app onBluetoothDeviceFound 不触发了
操作步骤
onBluetoothDeviceFound
预期结果
能搜索设备
实际结果
搜索不到设备
bug描述
蓝牙 onBluetoothDeviceFound 不触发回调了 救命啊 以前还好好的 现在升级idea就不行了
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
PC开发环境操作系统 | Mac | HBuilderX |
PC开发环境操作系统版本号 | 13.3 | |
HBuilderX类型 | 正式 | |
HBuilderX版本号 | 3.96 | |
手机系统 | Android | |
手机系统版本号 | Android 13 | |
手机厂商 | 华为 | |
手机机型 | 一般手机 | |
页面类型 | vue | |
vue版本 | vue2 | |
打包方式 | 云端 |
妈蛋 重启手机又可以了(手机自带的蓝牙列表一直可以搜索到设备)。。
回复 DCloud_UNI_OttoJi: 没发现了
回复 DCloud_UNI_OttoJi: 我能复现 ,一直不回调
其实也不是升级导致的 是突然就不行了 我之前一直是3.96 我刚又升级到3.98 也还是不行 郁闷啊
25年前来,也是onBluetoothDeviceFound这个破api在安卓手机上(小米15,android15)无法触发
兄弟,我最近也遇到了onBluetoothDeviceFound不触发,不过我发现是因为我的地理位置没开启,导致一直触发不了,开启就ok了,不知道你那边有无开启
startBluetoothDevicesDiscovery 如果不传services参数,就能搜索到蓝牙设备,加上之后就搜不到了
在使用 uni-app 开发蓝牙相关应用时,onBluetoothDeviceFound
事件用于监听搜索到新设备的事件。如果你发现该事件没有触发,可能是由多种原因导致的,例如权限问题、设备兼容性问题、蓝牙状态异常等。下面是一个基本的代码示例,以及一些可能导致 onBluetoothDeviceFound
不触发的常见原因和相应的代码检查点。
基本代码示例
// 确保在组件或页面中已经引入了uni-app的蓝牙API
const bluetoothAdapter = uni.getBluetoothAdapter();
export default {
data() {
return {
devices: []
};
},
methods: {
startBluetoothDevicesDiscovery() {
// 打开蓝牙适配器
bluetoothAdapter.openBluetoothAdapter({
success: () => {
console.log('蓝牙适配器已打开');
// 开始搜索蓝牙设备
bluetoothAdapter.startBluetoothDevicesDiscovery({
allowDuplicatesKey: false,
success: (res) => {
console.log('开始搜索蓝牙设备', res);
// 监听找到新设备的事件
uni.onBluetoothDeviceFound((devices) => {
console.log('找到新设备', devices.devices);
this.devices = this.devices.concat(devices.devices);
});
},
fail: (err) => {
console.error('搜索蓝牙设备失败', err);
}
});
},
fail: (err) => {
console.error('打开蓝牙适配器失败', err);
}
});
},
stopBluetoothDevicesDiscovery() {
// 停止搜索蓝牙设备
bluetoothAdapter.stopBluetoothDevicesDiscovery({
success: (res) => {
console.log('停止搜索蓝牙设备', res);
}
});
// 移除监听事件
uni.offBluetoothDeviceFound();
}
}
};
可能的原因及检查点
-
权限问题:确保应用有访问蓝牙的权限。在 Android 上,需要在
manifest.json
中声明蓝牙权限。 -
蓝牙状态:检查蓝牙是否已打开。在调用
startBluetoothDevicesDiscovery
前,应确保蓝牙适配器是开启状态。 -
设备兼容性:某些设备或操作系统版本可能不支持某些蓝牙功能。
-
API调用顺序:确保
startBluetoothDevicesDiscovery
在openBluetoothAdapter
成功回调中调用。 -
事件监听移除:如果在某个时刻调用了
uni.offBluetoothDeviceFound()
,则后续将不会接收到onBluetoothDeviceFound
事件。 -
错误处理:仔细查看
startBluetoothDevicesDiscovery
和onBluetoothDeviceFound
的失败回调,以便及时发现和处理错误。
通过上述代码和检查点,你应该能够诊断和解决 onBluetoothDeviceFound
不触发的问题。如果问题依旧存在,建议查阅 uni-app 官方文档或社区论坛获取更多帮助。