我已经写了我自己的小BLE扫描服务,是通过警报触发每3-5秒。它扫描1.1秒,得到周围的信标,然后将RSSI信号转换成一个粗略的接近。
我现在正在考虑Radius网络安卓iBeacon服务,但我想知道我如何能够实现同样的背景扫描。
我希望信标开始运行,在后台运行,并将意图接收到广播接收机,以决定我对扫描的信标做什么。
是否有这样的例子,是否有一个估计的电池消耗多少?
发布于 2013-12-10 03:48:58
Radius网络公司的安卓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的测试,这可以将手机的总电池消耗从95‘s降低到55’s(这两个数字都包括整个操作系统的耗电量)。
全面披露:我在Radius工作,是安卓iBeaconLibrary的主要作者。
https://stackoverflow.com/questions/20475190
复制相似问题