在Android上为蓝牙低功耗创建后台服务

Veg*_*und 47 android bluetooth-lowenergy

背景:

理想情况下,我希望我的Android设备能够一直扫描蓝牙低功耗设备,以便在出现具有特定属性的新设备时启动应用程序.

因此,BLE中的广播分组将例如枚举由广播设备提供的一组服务.然后,应用程序可以注册某些服务的兴趣,并在具有此服务的设备进入范围时自动启动.

根据我的理解,这不是Android BLE API的工作原理吗?那我怎么能得到类似的东西呢?

最简单的例子:

我有一个BLE传感器可以记录环境温度.每当我的Android手机足够接近时,我想连接并下载所有数据,并将其发送到某些云存储解决方案.这个应用程序不需要任何GUI(至少在配置完成后不需要).但是如何在没有耗尽电池的情况下在后台运行,但是一旦它在范围内,我仍然可以很快地连接设备?

问题:

我是否需要设置计时器并偶尔唤醒应用程序,然后手动开始扫描?我应该选择什么样的间隔.我可以在不对电池产生不利影响的情况下让扫描仪运行多长时间?

可能的方法:

这是我到目前为止所提出的.

  • 用于设置要扫描的间隔和设备的配置活动
  • 配置活动将设置类似于Scheduler示例的WakefulBroadcastReceiver
  • 当接收器获得onReceive事件时,我启动了一个BLE扫描服务(我已经写过)作为一个唤醒服务.
  • 扫描服务开始扫描(使用已注册的回调).
  • 该服务可能会获得可以采取行动的报告
  • 超时后,服务将停止扫描仪并结束唤醒服务.

这有效,但我不确定这是最好的方法.我也不知道我可以有多小间隔,仍然可以避免破坏电池寿命.我想要的是每两分钟开始扫描一次,扫描10-20秒.但我担心唤醒设备的频率会相当高吗?

dav*_*ung 22

此功能已全部移至开源Android Beacon Library,该将:

  • 当检测到匹配所需模式的iBeacons时,唤醒/启动您的应用

  • 即使用户尚未启动您的应用,也会在后台执行信标扫描

  • 在后台自动将扫描速率降低到每五分钟30秒,以节省电池电量.(时间可配置.)

代码示例在此处显示

如果您的BLE设备不是信标,您仍然可以使用此库来实现此功能,方法是让传感器也作为信标进行传输,然后检测到连接到主服务.

  • 非常不同,是的.它是一个更高级别的API,可以轻松地使用信标.使用内置的BLE API,您必须自己完成所有解析和繁重的工作. (2认同)