Android中BluetoothLeScanner的setReportDelay的目的是什么?我无法想象为什么有人会延迟收到报告...
3 回答
来自安卓官方网站:
setReportDelay()接受reportDelayMillis
参数,其中reportDelayMillis
是:
报告延迟以毫秒为单位。设置为 0 以立即通知结果。值 > 0 导致扫描结果排队并在请求的延迟之后或内部缓冲区填满时交付
来回答你的问题:
Android中BluetoothLeScanner的setReportDelay的目的是什么?我无法想象为什么有人会延迟收到报告...|
据我了解,这样做的目的是有时当您扫描很短的时间时,并不是所有的devices/beacons
都可以找到,但是在第二次扫描时,可以在扫描时咳出另一个。
例如:
假设您有三个beacons
,并且您对1s
. 在第一次扫描中,仅找到单个信标,但在第二次扫描中也发现了其他信标。设置延迟将queue
全部显示,您将能够显示所有这些。否则有时会显示单个信标,有时会显示所有信标,有时会显示其中两个。(这主要与frequency
他们传输的内容有关)
您也可以将其Lists
用于此目的,因此当beacon
找到 a 时,您将它们添加到 thelist
并在一些之后显示它们delay
(使用Handler/Timer
)。但这需要更多的工作。所以可能用这个功能简化了
setReportDelay() > 0 导致扫描器将结果排队,然后从 ScanCallback 触发 onBatchScanResults() 而不是正常的 onScanResult()。
如果您需要每隔几秒进行一次 UI 更新,这将非常有用:您可以简单地延迟结果,而不是每次通知数据包到达时都刷新您的 UI。此外,您可以获得更完整的结果集。
请注意,您的设备需要能够支持这一点。看
不同设备的扫描方式略有不同。扫描时,每次扫描都会多次返回相同的找到的设备。
如果您设置延迟,Android 将创建一个队列,并在返回队列中的设备列表之前过滤掉所有重复项。