Когда setForegroundBetweenScanPeriod установлен в течение длительного времени, и маяк выключен / включен, большое количество событий Range запускается - PullRequest
0 голосов
/ 07 февраля 2020

Действие используется службой переднего плана.

BeaconManager используется в качестве переднего плана в этой службе.

Версия библиотеки - 2.16.2

Настройки следующие:

g_beaconManager = BeaconManager.getInstanceForApplication(this);

g_beaconManager.setForegroundBetweenScanPeriod(8000);
g_beaconManager.setForegroundScanPeriod(1100);

g_beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
g_beaconManager.bind(this);

g_region = new Region("iBeacon", null, null, null);

g_beaconManager.setRegionStatePersistenceEnabled(false);

g_beaconManager.setDebug(true);

Выполните следующие действия: ① Запустите службу

② didRangeBeaconsInRegion запущен и получена информация о маяке

power Выключение маяка

④ Через 9,9 секунды didRangeBeaconsInRegion запустил и подтвердил отсутствие информации о маяке

ON Включение маяка

⑥didRangeBeaconsInRegion сработало в больших количествах, и некоторые без информации маяка появляются. Менее чем за 9,9 секунд.

Журнал прилагается. введите описание изображения здесь

③ идет после 14: 36: 13.266.

⑤ идет после 14: 36: 22.332.

14: 36: 26.372 имеет проблему

SetForegroundBetweenScanPeriod (4000) не вызвал это.

Можете ли вы сказать мне, почему это происходит?

Это не произошло с SetForegroundBetweenScanPeriod (4000), когда Я проверил, но не могли бы вы сказать мне, если это могло случиться?

1 Ответ

0 голосов
/ 07 февраля 2020

При более длительных периодах сканирования библиотека использует отфильтрованное сканирование с намеренной поддержкой Bluetooth во время периода сканирования, когда маяки не видны. Это оптимизация, предназначенная для обеспечения быстрого обратного вызова при обнаружении первого маяка, чтобы разбудить ваше приложение, когда оно находится в фоновом режиме с настройками библиотеки по умолчанию.

Эта оптимизация не предназначена для запуска в случае переднего плана служба сканирует с большим периодом между сканированиями, но это все равно происходит, потому что нет лога c, чтобы предотвратить это. (Это необычное использование библиотеки, поэтому библиотека не была оптимизирована для такого использования.)

Если это вызывает у вас проблемы, вы можете попробовать отключить поведение с помощью beaconManager.setAndroidLScanningDisabled(true). Это отключит сканирование между периодами сканирования, но может иметь другие побочные эффекты.

...