uni-app 蓝牙模块问题 uni.stopBluetoothDevicesDiscovery和uni.closeBluetoothAdapter无法正确关闭蓝牙模块 仍在持续获取
uni-app 蓝牙模块问题 uni.stopBluetoothDevicesDiscovery和uni.closeBluetoothAdapter无法正确关闭蓝牙模块 仍在持续获取
测试过的手机
荣耀30pro HarmonyOS4.2.0
操作步骤
调用蓝牙试一下就知道
预期结果
uni.stopBluetoothDevicesDiscovery, uni.closeBluetoothAdapter 无法正确关闭蓝牙模块,还是在一直获取
实际结果
uni.stopBluetoothDevicesDiscovery, uni.closeBluetoothAdapter 无法正确关闭蓝牙模块,还是在一直获取
bug描述
我在调用 uni.stopBluetoothDevicesDiscovery, uni.closeBluetoothAdapter 后 uni.onBluetoothDeviceFound 还是会一直打印出蓝牙信息来
开发环境与项目信息
项 | 详情 |
---|---|
产品分类 | uniapp/App |
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | Windows 10 专业版22H2 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.29 |
手机系统 | 全部 |
手机厂商 | 荣耀 |
页面类型 | vue |
vue版本 | vue3 |
打包方式 | 离线 |
项目创建方式 | HBuilderX |
在uni-app开发中,如果你遇到uni.stopBluetoothDevicesDiscovery
和uni.closeBluetoothAdapter
无法正确关闭蓝牙模块的问题,可能是由于调用顺序、状态管理或异步处理不当导致的。下面是一个较为完整的示例代码,展示了如何正确管理蓝牙模块的生命周期,包括开启、发现和关闭蓝牙设备。
首先,确保你已经正确引入了uni-app的蓝牙API,并在manifest.json
中配置了蓝牙权限。
// pages/bluetooth/bluetooth.vue
<template>
<view>
<button @click="openBluetoothAdapter">开启蓝牙</button>
<button @click="startDiscovery" v-if="isBluetoothOpen">开始发现设备</button>
<button @click="stopDiscoveryAndCloseAdapter" v-if="isDiscovering">停止发现并关闭蓝牙</button>
</view>
</template>
<script>
export default {
data() {
return {
isBluetoothOpen: false,
isDiscovering: false,
};
},
methods: {
openBluetoothAdapter() {
uni.openBluetoothAdapter({
success: () => {
this.isBluetoothOpen = true;
console.log('蓝牙已开启');
},
fail: (err) => {
console.error('开启蓝牙失败:', err);
},
});
},
startDiscovery() {
uni.startBluetoothDevicesDiscovery({
allowDuplicatesKey: false,
success: () => {
this.isDiscovering = true;
console.log('开始发现设备');
// 可以在这里监听设备发现事件
uni.onBluetoothDeviceFound((device) => {
console.log('发现设备:', device);
});
},
fail: (err) => {
console.error('开始发现设备失败:', err);
},
});
},
stopDiscoveryAndCloseAdapter() {
uni.stopBluetoothDevicesDiscovery({
success: () => {
this.isDiscovering = false;
console.log('已停止发现设备');
uni.closeBluetoothAdapter({
success: () => {
this.isBluetoothOpen = false;
console.log('蓝牙已关闭');
},
fail: (err) => {
console.error('关闭蓝牙失败:', err);
},
});
},
fail: (err) => {
console.error('停止发现设备失败:', err);
},
});
},
},
};
</script>
在这个示例中,我们定义了三个主要操作:开启蓝牙、开始发现设备和停止发现并关闭蓝牙。通过isBluetoothOpen
和isDiscovering
两个状态变量来控制按钮的显示和隐藏,确保用户不会在不适当的状态下执行操作。
注意,uni.onBluetoothDeviceFound
事件监听器用于在设备被发现时进行处理,确保即使在发现过程中,应用也能正确响应。在stopDiscoveryAndCloseAdapter
方法中,我们首先调用uni.stopBluetoothDevicesDiscovery
停止发现,然后再调用uni.closeBluetoothAdapter
关闭蓝牙适配器,确保关闭操作按顺序执行。
如果问题仍然存在,请检查是否有其他异步操作干扰了蓝牙模块的关闭流程,或者尝试在不同的设备或系统版本上测试。