【问题标题】:Preserving Ble Connection throughout the whole app using RxAndroidBle library使用 RxAndroidBle 库在整个应用程序中保留 Ble 连接
【发布时间】:2018-01-17 22:19:56
【问题描述】:

我正在开发一个 BLE 应用程序(使用 RxAndroidBle 库!),它能够连接到多个设备很长一段时间。 最近业务需求略有变化,我必须始终保持与所有设备的连接 整个应用程序。我的意思是在我连接设备后,我必须在所有屏幕上保持稳定的连接,如果我断开连接 我必须提示用户。

到目前为止,我有某种BleManager,它是对RxBleClient 的抽象,而BleDevice 是对RxBleDevice 的抽象。 这两个类都覆盖了一些响应式接口,它们被注入到适当的模块中,并且所有订阅和取消订阅它们都是在这些特定的屏幕模块中完成的。 但是现在我必须改变方法,因为我必须一直保持连接。

问题是: 除了在 Android Service 中创建 Ble Device 并将订阅保留在该 Service 中之外,还有其他更好的方法来保持与 Ble 设备的稳定连接吗? 所有 Ble 示例/教程都将这些连接保留在服务中,但我不是这个解决方案的忠实粉丝,因为它也不太适合我的架构。 我想知道我是否可以以某种方式将它与应用程序实例或类似的东西绑定。 非常感谢服务以外的任何想法。

【问题讨论】:

  • 今天早上我遇到了this 的回答,解决方案与我实施的类似,但仍然需要使用服务。

标签: android bluetooth android-service rxandroidble


【解决方案1】:

我会亲自做一项服务,并且它“保证”它将在我的应用程序的整个生命周期中持续存在。

然后我会在服务之上构建一个抽象并与之通信,而不是直接与服务通信。

【讨论】:

  • 你所说的“在上面”到底是什么意思?我有一个想法将这个 BleManager 注入到这个服务中,因为它是一个单例,所以将它注入到其他模块中。在服务中,我会保留订阅,我会在屏幕模块中发布一些主题的结果,这些主题将传播事件。 BleManager 包含响应式接口,因此我可以在需要时订阅这些主题。
  • 我的意思是,如果您的 BleManager 是 BLE 连接的抽象,那么我将创建另一个抽象来代表我的设备域,因此 BLE 将只是一个实现细节。应用程序模块不一定需要了解 BLE 和所有东西,但需要了解设备背后的业务逻辑。
猜你喜欢
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
  • 2017-09-30
相关资源
最近更新 更多