gpt4 book ai didi

android - RxAndroidBle : Periodic advertising scan

转载 作者:行者123 更新时间:2023-11-29 15:00:09 26 4
gpt4 key购买 nike

当我未连接到我的设备时,我需要永久扫描ble广告以找到它并知道何时连接到它(特定产品)。此扫描是在前台服务中实现的,以匹配 8.0 的先决条件。

为了节省电量,我想定期扫描(同时遵守 Android 7 的启动量/时间限制)。我看到两种不同的实现:

  • 每隔 X 秒开始扫描,并能够在 Y 秒后停止扫描,等待时间将为 X-Y。

    ‌‌ ‌‌ ‌‌ ‌‌ ‌‌ 扫描‌‌ ‌‌ ‌‌ ‌‌ ‌‌ ‌‌ 等等‌‌ ‌‌ ‌‌ ‌‌ ‌‌ ‌‌ 扫描‌‌ ‌‌ ‌‌ ‌‌ ‌‌ ‌‌ 等等
    |--------------|------|--------------|------|---
    |---------X-------->|---------X-------->|---
    |------Y----->‌‌ ‌‌ ‌‌ ‌‌ ‌‌ ‌‌ ‌‌ ‌‌ |-----Y----->‌‌ ‌‌ ‌‌ ‌‌ ‌‌ ‌‌ ‌‌ ‌‌ |---


  • 开始扫描 X 秒,等待 Y 秒,开始扫描 X 秒等等。

    ‌‌ ‌‌ ‌‌ ‌‌ ‌‌ 扫描‌‌ ‌‌ ‌‌ ‌‌ ‌‌ ‌‌ 等等‌‌ ‌‌ ‌‌ ‌‌ ‌‌ ‌‌ 扫描‌‌ ‌‌ ‌‌ ‌‌ ‌‌ ‌‌ 等等
    |--------------|------|--------------|------|---
    |------X---->|--Y->|------X---->|--Y->|---

我想用 Rx 风格而不是简单的计时器来做到这一点(我不是 RX 专家)。我不知道什么解决方案更好/更容易开发。这必须对客户端透明,并且必须保持原始 RxAndroidBle 正常工作,订阅 = 启动进程,取消订阅 = 停止进程。

我想我必须使用 Obersable.interval 但我不知道如何管理它有 fragment/示例吗?

最佳答案

原始 Android BLE API 有 BluetoothLeScanner允许使用四种模式之一开始扫描的类:

  • SCAN_MODE_LOW_LATENCY ——扫描是连续的
  • SCAN_MODE_BALANCED —扫描每 5 秒工作 2 秒
  • SCAN_MODE_LOW_POWER —扫描每 5 秒工作 0.5 秒
  • SCAN_MODE_OPPORTUNISTIC - 仅当不同的应用程序启动扫描时,扫描才会起作用

时间测量由 Nordic Semiconductors 员工进行,并以 comprehensive guide 的形式发布。适用于 Android BLE 开发人员。

RxAndroidBle库还有一个函数RxBleClient.scanBleDevices(ScanSettings, ScanFilter...)它接受 ScanSettings 内相同的模式对象。

如果需要实现不同的扫描参数,可以简单地使用Observable.takeUntil()的组合。和Observable.repeatWhen() :

Observable<ScanResult> lowLatencyScanObservable = rxBleClient.scanBleDevices(
new ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY) // make sure that the scanning will be always on by default
.build()
);

Observable<ScanResult> periodicalScan = lowLatencyScanObservable
.takeUntil(Observable.timer(SCAN_TIME, SCAN_TIMEUNIT)) // scan for a specific amount of time and then unsubscribe to the upstream
.repeatWhen(completionObservable -> completionObservable.delay(PAUSE_TIME, PAUSE_TIMEUNIT)); // when the upstream will complete because of `takeUntil()` wait for the pause time and resubscribe to the upstream

人们仍然需要记住 API 24+ 的未记录“功能”,它可以防止在 30 秒内启动超过 5 次扫描。

关于android - RxAndroidBle : Periodic advertising scan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47790910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com