Я создал приложение android (java), которое использует библиотеку altbeacon ( github page ) для обнаружения маяков через модуль Bluetooth.
Маяки настроены с помощью Eddystone UID, протокол с рекламным интервалом 100ms
и уровнем мощности передачи сильный (10dBm
). То, что я хотел бы сделать, это обнаружить RSSI
значение маяков с частотой 10Hz
(т.е. 100 мс).
Я уже подготовил сервис, который реализует библиотеку altbeacon соответствующая часть показана ниже:
mBeaconManager = BeaconManager.getInstanceForApplication(this);
beaconRegion = new Region("beacon_region", null, null, null);
// use Eddystone protocol
mBeaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT));
mBeaconManager.setAndroidLScanningDisabled(true);
mBeaconManager.setForegroundScanPeriod(100l); // scan frequency
mBeaconManager.setForegroundBetweenScanPeriod(0);
и обратный вызов didRangeBeaconsInRegion
, из которого я вижу маяки и получаю значение RSSI, таково:
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
Log.i(BeaconDataCollectorService.class.getSimpleName(), String.format("Found %s beacons in range", beacons.size()));
}
Что моя проблема? Запустив приложение, я заметил, что в didRangeBeaconsInRegion я часто не вижу все маяки.
Я запустил сбор данных в течение нескольких секунд, создавая формат CSV полученных данных, где вы видно, что у меня часто 0 (указывает на то, что маяк не был обнаружен); Я поставил общий доступ к этому csv на pastebin (https://pastebin.com/zkUZC5R4)
Как я могу улучшить частоту сканирования, всегда имея возможность обнаруживать все маяки?
используемая версия altbeacon:
implementation 'org.altbeacon:android-beacon-library:2.16.3'
Android версия: 9
Спасибо