didDetermineStateForRegion не запускается при перезапуске bluetooth - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь исправить ошибку, которая возникает, когда, запустив мое приложение (ioni c 4) на устройстве android и наблюдая за областями маяков, я выключаю bluetooth устройства, а затем снова включаю его.

Это процесс:

  • запустить мое приложение с включенным bluetooth
  • startMonitoringForRegion
  • didDetermineStateForRegion -> работает
  • Отключить устройство bluetooth
  • stopMonitoringForRegion
  • Включить устройство bluetooth
  • didDetermineStateForRegion не запускается

ВАЖНО -> Уродливое решение с setTimeout -> РЕШИТЬ ПРОБЛЕМУ -> Здесь переполнение стека с помощью этого обходного пути.

-------- - ЗДЕСЬ ОБЪЕКТ МОЙ МАЯК

this.beaconsFromJson = [
  {
    identifier: 'Mini S/N 018727',
    uuid: 'my-beacon-uuid',
    major: 1,
    minor: 18727,
    notifyEntryStateOnDisplay: false
  },
  {
    identifier: 'Mini S/N 018730',
    uuid: 'my-beacon-uuid',
    major: 1,
    minor: 18730,
    notifyEntryStateOnDisplay: false
  }
];

---------- ЗДЕСЬ МОЯ ФУНКЦИЯ СКАНИРОВАНИЯ

scan() {

_.forEach( this.beaconsFromJson, beacon => {

  const beaconRegion = this.ibeacon.BeaconRegion(
    beacon.identifier,
    beacon.uuid,
    beacon.major,
    beacon.minor,
    beacon.notifyEntryStateOnDisplay
  )

  this.ibeacon.startMonitoringForRegion(beaconRegion).then(
    () => console.log('Start monitoring' + beaconRegion.identifier),
    (error) =>
      console.error('Native layer failed to begin monitoring: ', error)
  );

}) // end foreach

setTimeout( () => {
  this.delegate.didDetermineStateForRegion().subscribe((data: IBeaconPluginResult) => {
    switch (data.state) {
      case 'CLRegionStateInside':
        this.beacons.push(data.region);
        this.loadingService.loading$.next({status: false});
        break;
      case 'CLRegionStateOutside':
        this.loadingService.loading$.next({status: false});
        this.beacons = this.beacons.filter(beacon => beacon.identifier !== data.region.identifier);
        break;
      default:
        break;
    }
  })
}, 1); // Ugly but it works --> https://stackoverflow.com/a/25211343/4197536
}
  • Когда я запускаю свое приложение с выключенным Bluetooth и затем я включаю его -> Работает, как ожидалось.
  • Когда я запускаю свое приложение с включенным Bluetooth, а затем выключаю и снова включаю -> Можно не читать свойство 'subscribe' для undefined (эта подписка, которую я делаю на didDetermineStateForRegion ())

Nb: этот скрипт работает, но я ищу лучшее решение!

1 Ответ

0 голосов
/ 28 мая 2020

Вопрос описывает эту последовательность:

  • stopMonitoringForRegion
  • Включить устройство bluetooth
  • didDetermineStateForRegion не запускается

Последний ожидается, что мониторинг был остановлен в первом маркере. Чтобы получить обратный вызов didDetermineStateForRegion, необходимо запустить мониторинг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...