在安卓系统中为BluetoothLeScanner开发setReportDelay的目的是什么?我不能想象为什么有人会延迟收到报告。
发布于 2015-03-23 15:10:15
来自Android Official Site
setReportDelay()采用reportDelayMillis参数,其中reportDelayMillis为:
报告的
延迟(毫秒)。设置为0可立即收到结果通知。值>0会导致扫描结果排队,并在请求的延迟之后或内部缓冲区填满时传送
关于你的问题:
setReportDelay BluetoothLeScanner在安卓系统中的作用是什么?我不能想象为什么一个人会延迟收到报告...|
据我所知,这样做的目的是,有时当你扫描很短的一段时间,并不是所有的devices/beacons都可以找到,但在第二次扫描时,可以在扫描时捕获另一个。
Ex:假设你有三个beacons,你对1s做了两次不同的扫描。在第一次扫描中只发现了一个信标,但在第二次扫描中也发现了其他信标。设置queue将延迟所有它们,您将能够显示所有它们。否则,有时会显示单个信标,有时显示所有信标,有时显示两个信标。(这主要与它们传输的frequency有关)
您也可以使用Lists来实现此目的,因此当找到beacon时,您可以将它们添加到list中,并在一些delay之后显示它们(使用Handler/Timer)。但这将需要更多的工作。所以它可能被这个函数简化了
发布于 2016-02-23 00:47:08
setReportDelay() >0导致扫描器将结果排队,然后从ScanCallback而不是普通的onScanResult()触发onBatchScanResults()。
如果您需要每隔几秒钟进行一次UI更新,这将非常有用:您可以简单地延迟结果,而不是每次通告包到达时都刷新您的UI。此外,您还可以获得更完整的结果集。
请注意,您的设备需要能够支持此功能。看见
http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html#isOffloadedScanBatchingSupported()
发布于 2015-08-15 11:59:17
不同的设备扫描方式略有不同。在扫描时,有些会在每次扫描时多次返回相同的发现设备。
如果您设置了延迟,Android将创建一个队列,并在返回队列中设备列表之前过滤掉所有重复项。
https://stackoverflow.com/questions/29168035
复制相似问题