#android #android-bluetooth #ibeacon-android #altbeacon #android-ibeacon
#Android #android-bluetooth #ibeacon-android #altbeacon #android-ibeacon
Вопрос:
Я работаю с Android-Beacon-Library для сканирования маяков и отображения информации. В фоновом режиме я хочу отправлять уведомления пользователю. Но я столкнулся с проблемой во время разработки.
Я хочу добавить регионы, которые мой Bootstrapnotifier должен искать после запуска приложения, потому что на данный момент я их не знаю.
Это мой код:
В моих приложениях метод onCreate:
mRegionBootstrap = new RegionBootstrap(this, new ArrayList<Region>());
после того, как я узнаю маяки, просмотрите мой список и добавьте их:
for(BeaconModel beacon : mBeaconList) {
mRegionBootstrap.addRegion(new Region(beacon.getId(),
Identifier.parse(beacon.getUuid()),
Identifier.fromInt(beacon.getMajor()),
Identifier.fromInt(beacon.getMinor())));
}
Во время выполнения все работает нормально, маяки найдены, и я могу отображать информацию.
Но когда я перевожу приложение в фоновый режим, фоновая служба не распознает ни один из них.
Я думаю, что фоновая служба ищет только массив в конструкторе.
Есть ли способ добавить маяки позже в фоновую службу?
Ответ №1:
Вы можете использовать этот mRegionBootstrap.addRegion(...)
метод, но только после установления соединения со службой beacon, в противном случае вызов игнорируется, и вы увидите Can't add bootstrap region
в журналах.
Я подозреваю, что это то, что происходит — обычно для установления соединения требуется менее секунды, но время может отличаться при запуске приложения в фоновом режиме. К сожалению, onBeaconServiceConnected
обратный вызов не является частью BootstrapNotifier
интерфейса, поэтому нелегко понять, когда это делать.
Возможно, вы можете просто отложить создание RegionBootstrap
, пока не узнаете свои регионы. Нет причин создавать его раньше.
Комментарии:
1. Спасибо за ваш быстрый ответ. Я попытался создать Regionbootstrap позже, когда я знаю свои регионы. Но затем я столкнулся с другой проблемой: при первом запуске приложения все работает нормально, но во второй раз я больше не нашел маяков, вместо этого состояние для каждого маяка в диапазоне было установлено равным 0. Я нашел другое решение своей проблемы. Когда я создаю Regionbootstrap с пустой областью вместо пустого списка, он работает.