我编写了自己的小型 BLE 扫描服务,每 3-5 秒通过一次警报触发一次。它扫描 1.1 秒以获取周围的信标,然后将 RSSI 信号转换为粗略接近。
我现在正在考虑 Radius Networks Android iBeacon 服务,但我想知道如何实现相同的后台扫描。
例如:我希望信标扫描开始并在后台运行,并将意图接收到广播接收器中,以决定我对扫描的信标做什么。
有没有一些例子,有没有估计这会消耗多少电池?
我编写了自己的小型 BLE 扫描服务,每 3-5 秒通过一次警报触发一次。它扫描 1.1 秒以获取周围的信标,然后将 RSSI 信号转换为粗略接近。
我现在正在考虑 Radius Networks Android iBeacon 服务,但我想知道如何实现相同的后台扫描。
例如:我希望信标扫描开始并在后台运行,并将意图接收到广播接收器中,以决定我对扫描的信标做什么。
有没有一些例子,有没有估计这会消耗多少电池?
Radius Networks 的Android iBeacon 库正是这样做的。在后台运行它所要做的就是将它绑定IBeaconManager
到具有较长生命周期的东西上。这可以是自定义android.app.Application
对象,也可以是您自己的服务。由于您已经为您的应用程序编写了自己的服务,您可以轻松地将 绑定IBeaconManager
到该服务,并且只要该服务运行,它就会在后台保持活动状态。如果您愿意,您也可以使用您的服务发送广播意图,但对于大多数用例,这可能不是必需的。
至于电池使用情况,图书馆的参考应用程序有一个示例,说明如何在图书馆上设置后台模式,以减少扫描发生的频率,从而节省电池电量。该参考应用程序中的相关代码在这里:
@Override
protected void onPause() {
super.onPause();
if (iBeaconManager.isBound(this)) iBeaconManager.setBackgroundMode(this, true);
}
@Override
protected void onResume() {
super.onResume();
if (iBeaconManager.isBound(this)) iBeaconManager.setBackgroundMode(this, false);
}
将后台模式设置为 true 可以减少每 5 分钟一次的蓝牙扫描——这与 iOS 所做的类似。根据对 Nexus 4 的测试,这将手机的整体电池消耗从 95mA 降低到 55mA(这两个数字都包括整个操作系统的消耗。)
全面披露:我在 Radius Networks 工作,并且是 Android iBeaconLibrary 的主要作者。