【问题标题】:didDetermineStateForRegion not fired when restarting bluetooth重新启动蓝牙时没有触发 didDetermineStateForRegion
【发布时间】:2020-05-28 13:56:00
【问题描述】:

我正在尝试修复一个错误,当我在 Android 设备上运行我的应用程序 (ionic 4) 并监控信标区域时,我关闭了设备蓝牙,然后再次打开它。

这个过程:

  • 在打开蓝牙的情况下运行我的应用
  • startMonitoringForRegion
  • didDetermineStateForRegion --> 有效
  • 关闭设备蓝牙
  • stopMonitoringForRegion
  • 打开设备蓝牙
  • didDetermineStateForRegion 未触发

重要 --> setTimeout 的丑陋解决方案 --> 解决问题 --> Here 使用此解决方法的堆栈溢出。

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

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
}
  • 当我在关闭蓝牙的情况下启动我的应用程序然后将其打开时 -> 它 按预期工作。
  • 当我在打开蓝牙的情况下启动我的应用程序,然后我将其关闭再打开 再次 --> 无法读取未定义的属性“订阅”(即 我订阅了 didDetermineStateForRegion())

注意:这个脚本有效,但我正在寻找更好的解决方案!

【问题讨论】:

    标签: bluetooth-lowenergy cordova-plugins ionic4 ibeacon android-ibeacon


    【解决方案1】:

    问题描述了这个顺序:

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

    最后一个要点是预期的,因为在第一个要点中停止了监控。为了获得didDetermineStateForRegion 回调,必须启动监控。

    【讨论】:

      猜你喜欢
      • 2015-08-18
      • 1970-01-01
      • 2020-06-05
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多