重新启动蓝牙时没有触发 didDetermineStateForRegion
Posted
技术标签:
【中文标题】重新启动蓝牙时没有触发 didDetermineStateForRegion【英文标题】:didDetermineStateForRegion not fired when restarting bluetooth 【发布时间】: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://***.com/a/25211343/4197536
当我在关闭蓝牙的情况下启动我的应用程序然后将其打开时 -> 它
按预期工作。
当我在打开蓝牙的情况下启动我的应用程序,然后我将其关闭再打开
再次 --> 无法读取未定义的属性“订阅”(即
我订阅了 didDetermineStateForRegion())
注意:这个脚本有效,但我正在寻找更好的解决方案!
【问题讨论】:
【参考方案1】:问题描述了这个顺序:
stopMonitoringForRegion 打开设备蓝牙 didDetermineStateForRegion 未触发最后一个要点是预期的,因为在第一个要点中停止了监控。为了获得didDetermineStateForRegion
回调,必须启动监控。
【讨论】:
以上是关于重新启动蓝牙时没有触发 didDetermineStateForRegion的主要内容,如果未能解决你的问题,请参考以下文章