Я использую POJO как BootStrapNotifier вместо класса Application. POJO имеет ссылку на контекст. Таким образом, начнется ли поиск фона? Я также использую этот класс как MonitorNotifier, когда приложение находится на переднем плане. Обязательно ли использовать BootStrapNotifier и RangeNotifier в том же классе, что и в ссылочном приложении? Правильно ли это? Если приложение будет убито, обнаружение маяка начнется только тогда, когда питание будет подключено или отключено или перезагружено?POJO как BootStrapNotifier вместо приложения
ответ
Да, вы можете использовать POJO для получения обратных вызовов из RegionBootsrap, но вы должны использовать метод onCreate
класса Android Application
для создания этого POJO и его настройки.
Класс Application
необходим, потому что его метод onCreate
- это первый исполняемый пользователем код, который запускается при запуске приложения для Android. Библиотека Android Beacon Library работает, потому что в библиотеке создается широковещательный приемник, который ищет события BOOT_COMPLETED
, ACTION_POWER_CONNECTED
и ACTION_POWER_DISCONNECTED
. Этот широковещательный приемник не делает многого, но если приложение не работает, когда происходит одно из этих событий, он вызывает способ Application
класса «onCreate
». Это создание RegionBootstrap
в это время, которое заставляет сканирование маяка начинаться в фоновом режиме, а затем уведомлять код пользователя, когда расположены маяки.
Приведенный ниже код показывает, как настроить POJO называется MyPojo
получить обратные вызовы от RegionBootstrap и зарегистрировать, что POJO в onCreate
методе Application
«s. Первым параметром RegionBootstrap
является класс, который будет получать обратные вызовы при обнаружении маяков.
Вы можете использовать POJO, чтобы настроить диапазон или делать что-либо еще, - нет причин, по которым такой код должен находиться в классе Android Application
.
public void onCreate() {
super.onCreate();
MyPojo myPojo = new MyPojo(this);
Region region = new Region("backgroundRegion",
null, null, null);
regionBootstrap = new RegionBootstrap(myPojo, region);
}
...
public class MyPojo implements BootstrapNotifier {
private Context mContext;
public MyPojo(Context context) {
mContext = context;
}
public Context getApplicationContext() {
return mContext;
}
public void didEnterRegion(Region region) {
...
}
public void didExitRegion(Region region) {
...
}
public void didDetermineStateForRegion(int state, Region region) {
...
}
}
Обязательно ли иметь RegionBootStrap как переменную экземпляра объекта Application. У меня есть RegionBootStrap это как часть другого класса и все еще поддерживаю его как ссылку. Будет ли это работать? Я не вижу никакого кода в RegionBootStrap, который запускает приложение. Все дело в том, что у меня нет кода, связанного с BeaconDetection в классе Application. Однако я все равно смогу сделать экземпляр RegionBootStrap доступным в OnCreate класса приложения. Должно ли это быть достаточно? – user4145787
Это должно быть хорошо, если вы: (1) Выполните код, который вызывает создание экземпляра 'RegionBootstrap' в методе' onCreate' 'Application'. (2) сохранить ссылку на 'RegionBootstrap', чтобы он не собирал мусор. – davidgyoung