Я пытаюсь исправить ошибку, которая возникает, когда, запустив мое приложение (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: этот скрипт работает, но я ищу лучшее решение!