最近开发一款蓝牙小程序, 最首要的的功能就是可以扫描周围的蓝牙设备. 翻了下相关文档很快就把demo写好给客户发过去了, 然后对方反馈说不断"重新进入小程序", 每隔4, 5次就会出现无法扫描到设备.
由于这个次数很固定, 自己也试验了一下果然也有类似的bug出现, 上网搜了下 原来是android底层的限制
static final int NUM_SCAN_DURATIONS_KEPT = 5;
// This constant defines the time window an app can scan multiple times.
// Any single app can scan up to |NUM_SCAN_DURATIONS_KEPT| times during
// this window. Once they reach this limit, they must wait until their
// earliest recorded scan exits this window.
static final long EXCESSIVE_SCANNING_PERIOD_MS = 30 * 1000;
按照注释的解释, 每30s内只能扫描5次
为了验证下是否正确, 我将每次进入小程序的时间拉长, 果然没有上述找不到设备的问题了
PS: 正常应该也不会有客户这么闲不断进来, 退出进来退出吧?
解决
这种限制貌似也没有太好的解决方法, 可以想到的方法就是第一次扫描过程中没有找到任何设备, 结束后自动开启第二次扫描(虽然有做一个按钮让用户自己点击开启扫描, 但是客户说自动扫描效果好点)
Page({
onShow(){
let isFirst = true
// 监听扫描结束
listen(res => {
if (isFirst && 没有任何设备){
// 扫描
startScan()
isFirst = false
}
})
// 扫描
startScan()
}
})