iBeacon后台扫描

时间:2013-12-09 16:10:53

标签: android ibeacon ibeacon-android

我写了自己的小BLE扫描服务,每隔3-5秒通过一次警报触发。它扫描1.1秒钟以获取它周围的信标,然后将RSSI信号转换为粗略接近。

我现在正在考虑Radius Networks Android iBeacon服务,但我想知道如何实现相同的后台扫描。

例如:我希望信标scannign在后台运行并在广播接收器中接收Intent,以决定我对扫描的信标做了什么。

是否有soem示例,估计消耗了多少电池?

1 个答案:

答案 0 :(得分:8)

Radius Networks'Android iBeacon Library正是这样做的。在后台运行它所需要做的就是将IBeaconManager绑定到具有较长生命周期的东西上。这可以是自定义android.app.Application对象,也可以是您自己的服务。由于您已经为自己的应用编写了自己的服务,因此可以轻松地将IBeaconManager绑定到该服务,只要服务运行,它就会在后台保持活动状态。如果您愿意,您也可以使用您的服务发送广播意图,但对于大多数用例,这可能不是必需的。

至于电池使用情况,图书馆的reference application有一个如何在磁带库上设置后台模式的示例,因此扫描的发生频率较低,从而节省了电量。该参考应用程序中的相关代码位于:

    @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的主要作者。