uni-app onBluetoothDeviceFound 不触发了

发布于 1周前 作者 bupafengyu 来自 Uni-App

uni-app onBluetoothDeviceFound 不触发了

操作步骤

onBluetoothDeviceFound

预期结果

能搜索设备

实际结果

搜索不到设备

bug描述

蓝牙 onBluetoothDeviceFound 不触发回调了 救命啊 以前还好好的 现在升级idea就不行了

开发环境 版本号 项目创建方式
PC开发环境操作系统 Mac HBuilderX
PC开发环境操作系统版本号 13.3
HBuilderX类型 正式
HBuilderX版本号 3.96
手机系统 Android
手机系统版本号 Android 13
手机厂商 华为
手机机型 一般手机
页面类型 vue
vue版本 vue2
打包方式 云端

9 回复

妈蛋 重启手机又可以了(手机自带的蓝牙列表一直可以搜索到设备)。。


重启后还能复现问题吗?

回复 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();
    }
  }
};

可能的原因及检查点

  1. 权限问题:确保应用有访问蓝牙的权限。在 Android 上,需要在 manifest.json 中声明蓝牙权限。

  2. 蓝牙状态:检查蓝牙是否已打开。在调用 startBluetoothDevicesDiscovery 前,应确保蓝牙适配器是开启状态。

  3. 设备兼容性:某些设备或操作系统版本可能不支持某些蓝牙功能。

  4. API调用顺序:确保 startBluetoothDevicesDiscoveryopenBluetoothAdapter 成功回调中调用。

  5. 事件监听移除:如果在某个时刻调用了 uni.offBluetoothDeviceFound(),则后续将不会接收到 onBluetoothDeviceFound 事件。

  6. 错误处理:仔细查看 startBluetoothDevicesDiscoveryonBluetoothDeviceFound 的失败回调,以便及时发现和处理错误。

通过上述代码和检查点,你应该能够诊断和解决 onBluetoothDeviceFound 不触发的问题。如果问题依旧存在,建议查阅 uni-app 官方文档或社区论坛获取更多帮助。

回到顶部