setBackgroundBetweenScanPeriod() не действует

Я пытаюсь обнаружить beacon один раз каждые 30 секунд в фоновом режиме, и когда приложение находится на переднем плане, оно должно постоянно обнаруживать маяк без какого-либо интервала. Для этого это код, который я написал,

public void onCreate() {
    super.onCreate();
    mBeaconManager = org.altbeacon.beacon.BeaconManager.getInstanceForApplication(this);
    mBeaconManager.getBeaconParsers().clear();
    mBeaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT));
    Identifier myBeaconNamespaceId = Identifier.parse("0xe2bfcc3cc2370789caef");
    Region region = new Region("my-beacon-region", myBeaconNamespaceId, null, null);

    mBeaconManager.setBackgroundBetweenScanPeriod(25000l);
    mBeaconManager.setBackgroundScanPeriod(5000l);
    mBeaconManager.setForegroundScanPeriod(60000l);
    mBeaconManager.setForegroundBetweenScanPeriod(0l);

    try {
        mBeaconManager.updateScanPeriods();
    } catch (RemoteException e) {
        e.printStackTrace();
    }

    regionBootstrap = new RegionBootstrap(this, region);
    backgroundPowerSaver = new BackgroundPowerSaver(this);

}

Несмотря на то, что я установил определенный период сканирования, он по-прежнему обнаруживает маяки с интервалом времени по умолчанию. Спасибо.


person Parag Kadam    schedule 07.12.2015    source источник


Ответы (1)


Поймите, что установка интервала сканирования переднего плана на:

mBeaconManager.setForegroundScanPeriod(60000l);

Не будет постоянно давать результат. Он будет сканировать в течение 60 секунд, а затем предоставлять результаты только в конце этого интервала.

Кроме того, вызов updateScanInterval всегда будет вызывать исключение, поскольку служба еще не привязана. Это должно быть в порядке, потому что код предварительно устанавливает новые интервалы сканирования, поэтому, когда привязка службы произойдет позже, интервалы сканирования вступят в силу.

person davidgyoung    schedule 07.12.2015
comment
Спасибо, теперь я знаю, что мне нужно установить период сканирования переднего плана около 2000 мс. Но как я могу заставить свое приложение искать маяки каждые 30 секунд в фоновом режиме, оно по-прежнему ищет маяки каждые ~ 5 минут в фоновом режиме... какие изменения я должен внести в свой существующий код? - person Parag Kadam; 08.12.2015
comment
mBeaconManager.setBackgroundBetweenScanPeriod(30000l); /* 30 секунд */ - person davidgyoung; 08.12.2015
comment
Это тоже не работает. Но есть одна вещь, которую я заметил здесь. В моем приложении есть менеджер сигналов тревоги, и всякий раз, когда срабатывает сигнал тревоги, обнаруживается маяк. Итак, теперь я собираюсь сделать будильник, который будет срабатывать каждые 30 секунд. Возможно, это не идеальное решение... но тем не менее оно работает :) - person Parag Kadam; 09.12.2015