【问题标题】:What's the purpose of setReportDelay for BluetoothLeScanner in AndroidAndroid中BluetoothLeScanner的setReportDelay的目的是什么
【发布时间】:2015-03-20 13:45:41
【问题描述】:

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

【问题讨论】:

    标签: android bluetooth-lowenergy android-5.0-lollipop android-bluetooth altbeacon


    【解决方案1】:

    来自Android Official Site

    setReportDelay() 采用reportDelayMillis 参数,其中reportDelayMillis 是:

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

    回答你的问题:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      请注意,您的设备需要能够支持此功能。见

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多