2016-08-09 7 views
0

Я пытаюсь слушать маяки, когда приложение закрыто (убито) на Android (отключено диспетчер задач).Altbeacon Android - EnterRegion, в то время как приложение убито (а не фон)

Я использую Appcelerator Titanium 5+ и для маяков с использованием модуля https://github.com/dwk5123/android-altbeacon-module. Приложение работает отлично, когда на фоновом режиме, но не когда вы его закрываете. Я пробовал метод Altbeacon.setRunInService(), создавая приложение на Titanium, и похоже, что он не работает.

Я также попытался модифицировать модуль для реализации этого http://altbeacon.github.io/android-beacon-library/background_launching.html, но я не могу получить доступ к классу приложений , потому что Titanium генерирует его в процессе сборки. Если я создам класс приложения и поместил его в манифест, он перезапишет мой прикладной класс приложения Titanium, а его не запустит.

Кроме того, в классе модуля «AndroidAltbeaconModuleModule» Я пытался реализовать интерфейс BootstrapNotifier и его методы: didDetermineStateForRegion, didEnterRegion и didExitRegion. Тогда на onAppCreate методом пытались реализовать:

Region region = new Region("My Region", Identifier.parse(
"00000000-0000-0000-0000-000000000001"), null, null); 
regionBootstrap = new RegionBootstrap(this, region); 

но this на regionBootstrap конструктор не является статичным и получил ошибку об этом.

Во-вторых, я попытался создать нестатический метод и вызывать этот код из модуля. Он успешно прослушивает события BootstrapNotifier, но не, если приложение убито, только на фоне. Это потому, что regionBootstrap не находится в методе onCreate класса Application? Я проверил этот вопрос Using the AltBeacon library without extending Application и этот Implementing BootstrapNotifier on Activity instead of Application class, а также , где davidgyoung (создатель Altbeacon lib) дал хороший ответ, но не возможный (по крайней мере для меня), который будет реализован с титаном.

Это единственный способ заметить маяк с приложением, убитым с помощью этой функциональности приложения? Я немного попытался реализовать JobService и BroadcastReceiver в модуле, но я не настолько хороший разработчик Java/Android , и это может занять много времени. У кого-нибудь есть дополнительная идея? Пожалуйста, поделитесь ею =)

Заранее благодарим!

ответ

0

Я не эксперт Titanium, но у меня есть два предложения:

  1. Не могли бы вы сделать Application класс, который расширяет одно, порождаемое титана, а затем изменить свой AndroidManifest.xml использовать ваш класс приложений? Если вы можете это сделать, вы можете построить RegionBootstrap в методе класса onCreate, а затем вызвать super.onCreate(), чтобы выполнить все, что делает Titanium.

  2. Единственный способ, по которому логика в вашем «AndroidAltbeaconModuleModule» будет работать, заключается в том, что код этого модуля выполняется сразу при запуске приложения в фоновом режиме (например, после получения RECEIVE_BOOT_COMPLETED при запуске телефона). На этом этапе пользовательский интерфейс не будет. Если это действительно так, как это работает, тогда это возможно, но вам придется каким-то образом получить доступ к объекту Android Context в Titanium и использовать его для создания нового собственного класса Java, который реализует все методы BootStrapNotifier.

Всегда есть другие способы сделать это. Модель RegionBootstrap предназначена для того, чтобы сделать это относительно безболезненным. Если вы не можете использовать его из-за ограничений Titanium, тогда вам нужно будет создать часть того, что он делает с нуля, что, несомненно, потребует написания, по крайней мере, родного BroadcastReceiver.

 Смежные вопросы

  • Нет связанных вопросов^_^