3***@qq.com
3***@qq.com
  • 发布:2026-03-19 15:56
  • 更新:2026-03-19 16:22
  • 阅读:19

uni.startBluetoothDevicesDiscovery 这个方法我设置上报时间为5000毫秒了,为什么还是扫描到就立即上报了

分类:uni-app
2026-03-19 15:56 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

这是因为你对 interval 参数的作用存在误解。

根据 uni.startBluetoothDevicesDiscovery 的文档说明:

interval 参数的真实含义

interval 控制的是同一设备重复上报的时间间隔,而不是扫描到新设备后延迟上报的时间。

  • interval: 0(默认值)时,找到新设备立即上报,且如果允许重复上报,同一设备会实时多次上报
  • interval: 5000 时,仅当 allowDuplicatesKey: true 时才会生效,表示同一设备每隔 5000 毫秒才会再次上报一次

为什么你设置 5000 还是立即上报?

  1. 首次发现设备必定立即上报:无论 interval 设置为多少,当扫描到一个新设备(之前未上报过的)时,系统会立即触发 uni.onBluetoothDeviceFound 回调

  2. allowDuplicatesKey 默认为 false:如果你没有显式设置 allowDuplicatesKey: true,那么同一设备不会重复上报,此时 interval 参数实际上不会起作用

正确的使用方式

如果你希望实现"每 5 秒上报一次设备信息"(去重后的定时上报):

uni.startBluetoothDevicesDiscovery({  
  allowDuplicatesKey: true,  // 必须设置为 true,interval 才会生效  
  interval: 5000,            // 同一设备每隔 5 秒上报一次  
  success(res) {  
    console.log('开始扫描')  
  }  
})

如果你希望实现"扫描 5 秒后自动停止"(而不是控制上报间隔):

uni.startBluetoothDevicesDiscovery({  
  success(res) {  
    console.log('开始扫描')  
    // 5 秒后自动停止扫描  
    setTimeout(() => {  
      uni.stopBluetoothDevicesDiscovery({  
        success: () => console.log('停止扫描')  
      })  
    }, 5000)  
  }  
})

总结interval 参数仅用于控制重复上报同一设备的频率,不能用于延迟首次发现设备的上报时间。

内容为 AI 生成,仅供参考
3***@qq.com

3***@qq.com (作者)

同一设备也是在5s之内上报。

要回复问题请先登录注册