2014-12-30 5 views
1

Я использую POJO как BootStrapNotifier вместо класса Application. POJO имеет ссылку на контекст. Таким образом, начнется ли поиск фона? Я также использую этот класс как MonitorNotifier, когда приложение находится на переднем плане. Обязательно ли использовать BootStrapNotifier и RangeNotifier в том же классе, что и в ссылочном приложении? Правильно ли это? Если приложение будет убито, обнаружение маяка начнется только тогда, когда питание будет подключено или отключено или перезагружено?POJO как BootStrapNotifier вместо приложения

ответ

1

Да, вы можете использовать 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) { 
    ... 
    } 
} 
+0

Обязательно ли иметь RegionBootStrap как переменную экземпляра объекта Application. У меня есть RegionBootStrap это как часть другого класса и все еще поддерживаю его как ссылку. Будет ли это работать? Я не вижу никакого кода в RegionBootStrap, который запускает приложение. Все дело в том, что у меня нет кода, связанного с BeaconDetection в классе Application. Однако я все равно смогу сделать экземпляр RegionBootStrap доступным в OnCreate класса приложения. Должно ли это быть достаточно? – user4145787

+0

Это должно быть хорошо, если вы: (1) Выполните код, который вызывает создание экземпляра 'RegionBootstrap' в методе' onCreate' 'Application'. (2) сохранить ссылку на 'RegionBootstrap', чтобы он не собирал мусор. – davidgyoung