Запуск приложения при обнаружении iBeacon

Я экспериментирую с библиотекой Android Beacon для мониторинга iBeacon в фоновом режиме с помощью этого кода:

public class IBeaconBootstrap extends Application implements BootstrapNotifier {

private RegionBootstrap regionBootstrap;

@Override
public void onCreate() {

   super.onCreate();

   Log.d("IBeaconBootstrap", "App started up");

   // wake up the app when any beacon is seen (you can specify specific id
   // filers in the parameters below)

   Region region = new Region("MyRegion", null, null, null);
   regionBootstrap = new RegionBootstrap(this, region);

   // This is for Apple compatible iBeacons
   BeaconManager.getInstanceForApplication(this).getBeaconParsers().add(new     BeaconParser().setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24"));
}

@Override
public void didDetermineStateForRegion(int state, Region region) {

   Log.d("Boostrap didDetermineStateForRegion", "Region " + region.toString());
}

@Override
public void didEnterRegion(Region region) {

   Log.d("Boostrap didEnterRegion", "Got a didEnterRegion call");

   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   this.startActivity(intent);
}

@Override
public void didExitRegion(Region region) {

   Log.d("Boostrap didExitRegion", "Got a didExitRegion call");
}
}

Приложение переходит на передний план, когда обнаруживает iBeacon, если он запущен, но ничего не происходит, если приложение не запущено. Это ожидаемое поведение или приложение должно быть запущено, если оно не запущено?


person Fab    schedule 20.08.2014    source источник


Ответы (1)


Вероятно, вам нужно уточнить, что вы подразумеваете под «приложение не запущено». Ты имеешь ввиду:

  1. Приложение установлено, но не запущено
  2. Приложение было запущено один раз, но после перезагрузки
  3. Приложение было убито из переключателя задач

Используя приведенный выше код, вот ожидаемое поведение в каждом случае:

  1. Приложение не будет запущено и не сможет автоматически запустить Activity.
  2. Приложение будет периодически сканировать маяки после загрузки и запускать действие при их обнаружении.
  3. Приложение не будет запущено и не сможет автоматически запускаться до тех пор, пока зарядное устройство не будет подключено/отключено или перезагружено. По истечении этого времени поведение будет таким же, как в (2). Дополнительные сведения об этом случае доступны здесь.

Важно отметить, что когда никакая активность не видна, библиотека будет выполнять сканирование только для поиска маяков каждые 5 минут, поэтому обнаружение может занять много времени. Этот интервал полностью настраивается.

Ограничения для случая (3) накладывает ОС Android. Должно произойти событие, позволяющее перезапустить приложение после того, как оно было уничтожено пользователем.

person davidgyoung    schedule 20.08.2014
comment
Спасибо за быстрый ответ. Меня интересует сценарий №3. Пользователь запускает приложение, использует его, а затем убивает. Если я правильно понимаю ваш ответ, после того, как приложение было убито, оно больше не запускается, если пользователь не подключит/отключит блок питания или не перезагрузит устройство. Верно? Другими словами, чтобы приложение постоянно знало об iBeacons, оно должно работать в фоновом режиме. Когда маяк находится в пределах досягаемости, он может автоматически выводиться на передний план. - person Fab; 21.08.2014
comment
Правильный. Я обновил свой ответ ссылкой на более подробное объяснение того, как это работает и почему: altbeacon.github.io/android-beacon-library/ - person davidgyoung; 21.08.2014