我的用例非常简单我只想在用户接近信标时检测具有给定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);
}
}
我需要对现有代码进行哪些更改才能获得所需的功能?感谢。