我正在使用android beacon库来检测beacons。我已经创建了一个实现Bootstrap Notifier的服务,它有两个方法:
@Override
public void didEnterRegion(Region arg0) {
Log.i(TAG, "A beacon has enter the region .........");
}
@Override
public void didExitRegion(Region arg0) {
Log.i(TAG, "A beacon has exit the region .........");
}
还有:
mAllBeaconsRegion = new Region("all beacons", Identifier.parse(UUID),null, null);
mBeaconManager = BeaconManager.getInstanceForApplication(this);
new BackgroundPowerSaver(this);
bootstrap = new RegionBootstrap(this, mAllBeaconsRegion);
mBeaconManager.setBackgroundScanPeriod(1000l);
mBeaconManager.setBackgroundBetweenScanPeriod(1000l);
我的问题是,在某些设备中,beacon会自动退出该区域并调用didExitRegion然后重新进入区域并调用didEnterRegion。它会再次自动断开连接。
这是在循环中发生的。我正在用棒棒糖进行测试。
我怎样摆脱这个? 请帮忙。
答案 0 :(得分:0)
了解导致Region退出的原因非常重要。当在10秒的时间段内没有检测到来自与Region对象匹配的信标的广告包时,区域出口将触发。有很多事情可以导致这种情况:
不经常播放的硬件信标。为了获得最佳性能,信标应以10 Hz或更高的频率进行广告宣传。一些制造商放慢广告费用以节省电池,使得信标仅每5秒左右做广告。如果由于无线电噪声或其他问题导致接收器丢失了一些分组,则这可能导致区域退出。要解决此问题,将您的信标配置为每秒至少播放一次(1 Hz。)
信标位于移动设备无线电范围的边缘。蓝牙信标的变化范围为2-50米,具体取决于制造商,设置,位置和接收移动设备上的天线。如果信号非常弱,则检测是间歇性的,如果在10秒内没有看到包,则导致退出。要解决此问题,会增加信标的发射功率,或添加软件过滤器以忽略间歇性退出事件。
某些移动设备(例如Moto X,Moto G,Nexus 4,Nexus 7)存在硬件缺陷,其中蓝牙和WiFi无法同时工作。这可能会导致您描述的症状因为它使信标检测断断续续。要解决此问题,在其中一台设备上查找信标时禁用WiFi。