Я пишу пользовательский класс Android-приложения, в котором используется Android-Beacon-Library от AltBeacon.AltBeacon: onBeaconServiceConnect не вызывается, когда BeaconConsumer привязан от DidEnterRegion BootstrapNotifier callback
Вместо публикации класса я воспроизвожу проблему с использованием эталонных образцов реализации, поставляемых с библиотекой.
Если я активирую как мониторинг (путем внедрения RegionBootstrap), так и диапазон beaconManager.bind (новый BeaconConsumer() ...) непосредственно в onCreate(), все работает отлично.
Я хотел бы, однако, чтобы начать начиная только тогда, когда маяк входит в область, поэтому в didEnterRegion (область arg0) обратного вызова из RegionBootstrap, но когда я делаю так, onBeaconServiceConnect() никогда не вызывается. Я считаю, что делать это таким образом было бы более эффективным с точки зрения потребления батареи.
Я попытался выполнить симуляцию на основном потоке, а также использовать задержанные таймеры, но это не сработало.
Любой может заставить это работать? Любая помощь ценится!
public class BeaconReferenceApplication extends Application implements BootstrapNotifier {
private static final String TAG = "AndroidProximityReferenceApplication";
private RegionBootstrap regionBootstrap;
private BackgroundPowerSaver backgroundPowerSaver;
BeaconManager beaconManager;
Context context = this;
public void onCreate() {
super.onCreate();
beaconManager = org.altbeacon.beacon.BeaconManager.getInstanceForApplication(this);
// Setup beacon layout - should be done once only
List<BeaconParser> bp = beaconManager.getBeaconParsers();
bp.add(new BeaconParser().setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24"));
Region region = new Region("backgroundRegion", null, null, null);
regionBootstrap = new RegionBootstrap(this, region);
backgroundPowerSaver = new BackgroundPowerSaver(this);
// THIS WORKS
bindBeaconConsumer();
}
public void bindBeaconConsumer() {
beaconManager.bind(new BeaconConsumer() {
@Override
public void onBeaconServiceConnect() {
// ISSUE : Does not pass here when bindBeaconConsumer() is called from didEnterRegion
// Set Range Notifier and start ranging
}
@Override
public Context getApplicationContext() {
return context;
}
@Override
public void unbindService(ServiceConnection serviceConnection) {
context.unbindService(serviceConnection);
}
@Override
public boolean bindService(Intent intent, ServiceConnection serviceConnection, int i) {
return context.bindService(intent, serviceConnection, i);
}
});
}
@Override
public void didEnterRegion(Region arg0) {
Log.d(TAG, "did enter region.");
// THIS DOESN'T WORK : onBeaconServiceConnect() never called
// bindBeaconConsumer();
}
@Override
public void didExitRegion(Region region) {
}
@Override
public void didDetermineStateForRegion(int state, Region region) {
}
}