android - iBeacon 后台扫描

标签 android ibeacon ibeacon-android

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

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

例如:我希望信标扫描开始并在后台运行,并将 Intents 接收到广播接收器中,以决定我如何处理扫描的信标。

是否有一些例子,是否有估计这会消耗多少电池?

最佳答案

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

至于电池使用,图书馆的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 的主要作者。

关于android - iBeacon 后台扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20475190/

相关文章:

android - 应用程序被终止时 Android 中的信标检测

android - 使用 Radius Networks Android Beacon 库检测 iBeacons UUID

Android库: resources are merged,代码不是

android - ICS 拆分调用/通知音量

android - 找不到 com.wix :detox:+ 的任何匹配项

c# - 对 Windows Phone 设备的 iBeacon 支持

android - Python + MIDI + Ableton Live,怎么做?

ios - 室内导航如何在 iOS 中使用 iBeacon 或 wi-fi 工作?

iOS/Beacons - 打开蓝牙时如何触发 didEnterRegion?

android - onBeaconServiceConnect 未调用