Altbeacon Library示例似乎在后台工作

时间:2014-09-18 07:14:14

标签: android ibeacon ibeacon-android android-ibeacon altbeacon

我在Github repo上使用了AltbeaconRadio Network)提供的基本示例应用程序。

MonitoringRanging,所有内容似乎都适用于我的iBeacon但仅限于前景

我已完成以下步骤以使其在Foreground中运行。

public class BeaconReferenceApplication extends Application implements BootstrapNotifier, RangeNotifier
{

private static final String TAG = "BeaconReferenceApplication";
private BeaconManager mBeaconManager;
private Region mAllBeaconsRegion;
private BackgroundPowerSaver mBackgroundPowerSaver;
private RegionBootstrap mRegionBootstrap;
private BackgroundPowerSaver backgroundPowerSaver;

@Override
public void onCreate()
{
    mAllBeaconsRegion = new Region(getPackageName(), null, null, null);

    mBeaconManager = BeaconManager.getInstanceForApplication(this);
    mBackgroundPowerSaver = new BackgroundPowerSaver(this);
    mRegionBootstrap = new RegionBootstrap(this, mAllBeaconsRegion);
    mBeaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
    backgroundPowerSaver = new BackgroundPowerSaver(this);
}

@Override
public void didRangeBeaconsInRegion(Collection<Beacon> arg0, Region arg1)
{
    System.out.println("app-> didRangeBeaconsInRegion");
}

@Override
public void didDetermineStateForRegion(int arg0, Region arg1)
{
    System.out.println("app-> didDetermineStateForRegion");
}

@Override
public void didEnterRegion(Region arg0)
{
    System.out.println("app-> didEnterRegion");
    try
    {
        Log.d(TAG, "entered region.  starting ranging");
        mBeaconManager.setRangeNotifier(this);
        mBeaconManager.startRangingBeaconsInRegion(mAllBeaconsRegion);
    }
    catch(RemoteException e)
    {
        Log.e(TAG, "Cannot start ranging");
    }

    Intent intentMainActivity = new Intent(this,MonitoringAndRangingActivity.class);
    intentMainActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intentMainActivity);
}

@Override
public void didExitRegion(Region arg0)
{
    System.out.println("app-> didExitRegion");
}

public void setMonitoringAndRangingActivity(MonitoringAndRangingActivity activity)
{
    mBeaconManager.setBackgroundMode((activity==null)?true:false);
}

}

Edit:我添加了方法mBeaconManager.setBackgroundMode(true);但没有帮助,我只是从BlutoothAdapter获取了stopLE scan()消息,一切都停止了,我是否需要在服务中实现此功能或其他什么?

但是一旦我转到后台(按后退或回家),日志和callback methods就会停止响应。 是否有任何我缺少的东西来激活背景iBeacon检测。

任何输入都会像恩惠一样。

1 个答案:

答案 0 :(得分:7)

如果您使用的是BackgroundPowerSaver,它会自动将Android Beacon Library转换为后台模式。无需手动调用setBackgroundMode

当库处于后台模式时,它每5分钟只进行一次扫描以节省电量(此时间是可配置的),因此可能需要长达五分钟的时间来检测信标。当你的aspp在后台时,我会看LogCat五分钟,看看你是否在那个时候得到任何检测。如果没有,在您的问题中添加LogCat摘录会很有帮助。