使用android上的altbeacon库无法在后台检测信标

时间:2017-02-15 07:40:39

标签: android altbeacon beacon eddystone

我的用例非常简单我只想在用户接近信标时检测具有给定UID的信标。 应用程序应该在后台每60秒查找一次信标。

我瞄准android marshmallow及以上,所以我确保位置从设置开始,并且还包括精确位置的运行时权限。

使用下面的代码我在背景中以非常不一致的方式检测信标,而不是每60秒检测一次。

这是我用来检测信标的代码: -

public class MyApplication extends Application implements BootstrapNotifier {
    private static final String TAG = "radbeacon";

    @Override
    public void onCreate() {
        super.onCreate();
        scanBeacons();
    }

    @Override
    public void didDetermineStateForRegion(int arg0, Region arg1) {
        // Don't care
    }

    @Override
    public void didEnterRegion(Region arg0) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        this.startActivity(intent);
    }

    @Override
    public void didExitRegion(Region arg0) {
        // Don't care
    }

    private void scanBeacons()
    {
        RegionBootstrap regionBootstrap;
        BackgroundPowerSaver backgroundPowerSaver;
        BeaconManager beaconManager;
        beaconManager = BeaconManager.getInstanceForApplication(this);
        beaconManager.getBeaconParsers().clear();
        beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT));
        Identifier identifier = Identifier.parse("0xe2bfcc3cc2370789caef");
        Region region = new Region("my-beacon-region",identifier,null,null);

        beaconManager.setBackgroundBetweenScanPeriod(60000L);
        beaconManager.setBackgroundScanPeriod(2000L);


        try
        {
            beaconManager.updateScanPeriods();
        }
        catch (RemoteException e){e.printStackTrace();}

        regionBootstrap = new RegionBootstrap(this,region);
        backgroundPowerSaver = new BackgroundPowerSaver(this);
    }
}

我需要对现有代码进行哪些更改才能获得所需的功能?感谢。

0 个答案:

没有答案