[didDetermineStateForRegion重新启动蓝牙时未触发

问题描述 投票:0回答:1

[我正在尝试修复在Android设备上运行我的应用程序(离子4)并监视信标区域时,我关闭设备蓝牙然后再次打开它时发生的错误。

此过程:

  • 使用蓝牙运行我的应用程序
  • startMonitoringForRegion
  • didDetermineStateForRegion->作品
  • 关闭设备蓝牙
  • stopMonitoringForRegion
  • 打开设备蓝牙
  • 未触发didDetermineStateForRegion

重要->带有setTimeout的丑陋解决方案-> 解决问题-> Here具有此解决方法的stackoverflow。

----------这里是我的信标对象

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
}
  • [当我关闭蓝牙启动我的应用程序,然后再将其打开时->可以正常工作。
  • [当我在打开蓝牙的情况下启动我的应用程序,然后将其关闭并重新打开时再次->无法读取未定义的属性“ subscribe”(即我对didDetermineStateForRegion()的订阅]

Nb:该脚本有效,但是我正在寻找更好的解决方案!

bluetooth-lowenergy cordova-plugins ionic4 ibeacon android-ibeacon
1个回答
0
投票

问题描述了此顺序:

  • stopMonitoringForRegion
  • 打开设备蓝牙
  • 未触发didDetermineStateForRegion

预期最后一个项目符号点,因为监视已在第一个项目符号点中停止。为了获得didDetermineStateForRegion回调,必须启动监视。

© www.soinside.com 2019 - 2024. All rights reserved.