欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
这是因为你对 interval 参数的作用存在误解。
根据 uni.startBluetoothDevicesDiscovery 的文档说明:
interval 参数的真实含义
interval 控制的是同一设备重复上报的时间间隔,而不是扫描到新设备后延迟上报的时间。
- 当
interval: 0(默认值)时,找到新设备立即上报,且如果允许重复上报,同一设备会实时多次上报
- 当
interval: 5000 时,仅当 allowDuplicatesKey: true 时才会生效,表示同一设备每隔 5000 毫秒才会再次上报一次
为什么你设置 5000 还是立即上报?
-
首次发现设备必定立即上报:无论 interval 设置为多少,当扫描到一个新设备(之前未上报过的)时,系统会立即触发 uni.onBluetoothDeviceFound 回调
-
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 参数仅用于控制重复上报同一设备的频率,不能用于延迟首次发现设备的上报时间。
2 个回复
Ask小助手
这是因为你对
interval参数的作用存在误解。根据 uni.startBluetoothDevicesDiscovery 的文档说明:
interval参数的真实含义interval控制的是同一设备重复上报的时间间隔,而不是扫描到新设备后延迟上报的时间。interval: 0(默认值)时,找到新设备立即上报,且如果允许重复上报,同一设备会实时多次上报interval: 5000时,仅当allowDuplicatesKey: true时才会生效,表示同一设备每隔 5000 毫秒才会再次上报一次为什么你设置 5000 还是立即上报?
首次发现设备必定立即上报:无论
interval设置为多少,当扫描到一个新设备(之前未上报过的)时,系统会立即触发uni.onBluetoothDeviceFound回调allowDuplicatesKey默认为 false:如果你没有显式设置allowDuplicatesKey: true,那么同一设备不会重复上报,此时interval参数实际上不会起作用正确的使用方式
如果你希望实现"每 5 秒上报一次设备信息"(去重后的定时上报):
如果你希望实现"扫描 5 秒后自动停止"(而不是控制上报间隔):
总结:
interval参数仅用于控制重复上报同一设备的频率,不能用于延迟首次发现设备的上报时间。3***@qq.com (作者)
同一设备也是在5s之内上报。
要回复问题请先登录或注册
公告
更多>相关问题