В настоящее время я пишу приложение для Android, которое использует Android-Beacon-Library AltBeacon (ранее Radius Network).
Мне нужно, чтобы приложение отображало уведомление при виде маяка, чего я добился с помощью Bootstrap Notifier, как подробно описано в примере кода здесь под заголовком Запуск приложения в фоновом режиме. (Изменение этого кода для отображения уведомления вместо запуска приложения).
Однако мне также требуется, чтобы приложение настроило RangeNotifier в другом действии, чтобы я мог измерять расстояния маяков от мобильного устройства. Я также сделал это, изменив пример кода в приведенной выше ссылке под заголовком Ranging Example Code.
Однако, когда я сделал это, мне показалось, что привязка к активности и настройка RangingNotifier, но при уничтожении активности она, похоже, не отвязывала BeaconConsumer, реализованную активностью, и код внутри функции didRangeBeaconsInRegion(...)
продолжал выполняться, хотя onDestroy () звонили.
Поэтому я попытался вызвать beaconManager.stopRangingBeaconsInRegion(region);
перед вызовом beaconManager.unbind(this);
, и это, казалось, остановило выполнение кода в didRangeBeaconsInRegion(...)
, но после того, как активность была уничтожена, я все еще продолжал видеть сканирование Bluetooth LE неоднократно в журналах без задержки между каждым сканированием как таковым.
08-14 11:09:50.527: D/BluetoothAdapter(21572): stopLeScan()
08-14 11:09:50.537: D/BluetoothAdapter(21572): startLeScan(): null
08-14 11:09:50.547: D/BluetoothAdapter(21572): onClientRegistered() - status=0 clientIf=7
Часто, когда я загружаю новую сборку и возвращаюсь к определенному действию с помощью RangingNotifier, я получаю следующую ошибку:
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.util.ConcurrentModificationException
at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
at org.altbeacon.beacon.service.BeaconService$ScanProcessor.doInBackground(BeaconService.java:609)
at org.altbeacon.beacon.service.BeaconService$ScanProcessor.doInBackground(BeaconService.java:602)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
... 4 more
Это наводит меня на мысль, что BeaconManager, возможно, не отвязывается от Activity.
Можно ли использовать как фоновый мониторинг с помощью класса приложения, так и использовать RangingNotifier в действии в одном приложении?
Извините за длинный вопрос, похоже, нигде не нашел ничего подробного об этом!