4

Android中BluetoothLeScanner的setReportDelay的目的是什么?我无法想象为什么有人会延迟收到报告...

4

3 回答 3

2

来自安卓官方网站

setReportDelay()接受reportDelayMillis参数,其中reportDelayMillis是:

报告延迟以毫秒为单位。设置为 0 以立即通知结果。值 > 0 导致扫描结果排队并在请求的延迟之后或内部缓冲区填满时交付

来回答你的问题:

Android中BluetoothLeScanner的setReportDelay的目的是什么?我无法想象为什么有人会延迟收到报告...|

据我了解,这样做的目的是有时当您扫描很短的时间时,并不是所有的devices/beacons都可以找到,但是在第二次扫描时,可以在扫描时咳出另一个。

例如: 假设您有三个beacons,并且您对1s. 在第一次扫描中,仅找到单个信标,但在第二次扫描中也发现了其他信标。设置延迟将queue全部显示,您将能够显示所有这些。否则有时会显示单个信标,有时会显示所有信标,有时会显示其中两个。(这主要与frequency他们传输的内容有关)

您也可以将其Lists用于此目的,因此当beacon找到 a 时,您将它们添加到 thelist并在一些之后显示它们delay(使用Handler/Timer)。但这需要更多的工作。所以可能用这个功能简化了

于 2015-03-23T07:10:15.063 回答
1

setReportDelay() > 0 导致扫描器将结果排队,然后从 ScanCallback 触发 onBatchScanResults() 而不是正常的 onScanResult()。

如果您需要每隔几秒进行一次 UI 更新,这将非常有用:您可以简单地延迟结果,而不是每次通知数据包到达时都刷新您的 UI。此外,您可以获得更完整的结果集。

请注意,您的设备需要能够支持这一点。看

http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html#isOffloadedScanBatchingSupported()

于 2016-02-22T16:47:08.327 回答
0

不同设备的扫描方式略有不同。扫描时,每次扫描都会多次返回相同的找到的设备。

如果您设置延迟,Android 将创建一个队列,并在返回队列中的设备列表之前过滤掉所有重复项。

于 2015-08-15T03:59:17.310 回答