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