背景:
理想情况下,我希望我的 Android 设备一直在扫描低功耗蓝牙设备,并能够在出现具有特定属性的新设备时启动应用程序。
因此,BLE 中的广播数据包将例如枚举广播设备提供的一组服务。然后,应用程序将能够注册对某些服务的兴趣,并在具有此服务的设备进入范围时自动启动。
据我了解,这不是 Android BLE API 的工作方式吗?那么我怎样才能得到类似的东西呢?
最简单的例子:
我有一个 BLE 传感器,可以随时间记录环境温度。每当我的 Android 手机足够近时,我都想连接并下载所有数据,并将其发送到某个云存储解决方案。这个应用程序不需要任何 GUI(至少在配置完成后不需要)。但是它应该如何在不耗尽电池的情况下在后台运行,但一旦它在范围内仍然给我一个很好的机会快速连接设备?
问题:
我是否需要设置一个计时器并每隔一段时间唤醒应用程序,然后手动开始扫描?然后我应该选择什么样的间隔。我可以让扫描仪运行多长时间而不会对电池产生不利影响?
可能的解决方案:
到目前为止,这是我想出的。
- 用于设置要扫描的时间间隔和设备的配置活动
- 配置活动将设置一个类似于调度程序示例的 WakefulBroadcastReceiver
- 当接收器收到 onReceive 事件时,我启动一个 BLE 扫描服务(我已经写过)作为唤醒服务。
- 扫描服务开始扫描(带有注册的回调)。
- 该服务可能会收到它可以采取行动的广告报告
- 超时后,服务将停止扫描程序并结束唤醒服务。
这可行,但我不确定这是最好的方法。我也不知道我可以有多小的间隔并且仍然避免破坏电池寿命。我想要的是每两分钟开始扫描一次,扫描 10-20 秒。但恐怕唤醒设备会相当频繁?