gpt4 book ai didi

ios - 尝试检测信标但失败,因为 isMonitoringAvailable 始终为 false

转载 作者:行者123 更新时间:2023-11-28 14:50:19 27 4
gpt4 key购买 nike

你好,我正在尝试检测和测距 apple's docs article 之后的信标

但在我的情况下 CLLocationManager.isMonitoringAvailable(for: CLBeaconRegion.self) 总是给我 false 因此我无法开始监控

当然,我在后台模式下为位置和位置更新设置了隐私

这是我的代码

func initializeLocationManager(){
locationManager.delegate = self
locationManager.requestAlwaysAuthorization()
locationManager.desiredAccuracy = kCLLocationAccuracyBest
}

func rangeBeacons(){
if CLLocationManager.isMonitoringAvailable(for: CLBeaconRegion.self) {
let region = CLBeaconRegion(proximityUUID: UUID(uuidString: beacons[0].uuid)!, identifier: beacons[0].identifier)
locationManager.startMonitoring(for: region)
}else {
print("CLLocation Monitoring is unavailable")
}
}

func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if status == .authorizedAlways {
rangeBeacons()
}
}

func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
if region is CLBeaconRegion {
// start monitoring
if CLLocationManager.isRangingAvailable() {
locationManager.startRangingBeacons(in: region as! CLBeaconRegion)
}
}
print("didEnter at \(region.identifier)")
}

func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) {
print("didExit at \(region.identifier)")
}

func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) {
if beacons.count > 0 {
let nearestBeacon = beacons.first!
switch nearestBeacon.proximity {
case .far:
print("far")
break
case .near:
print("near")
break
case .immediate:
print("It's behind yout")
break
case .unknown:
print("unknown")
}
}
}

但如果我直接使用 locationManager.startRangingBeacons 而不是 locationManager.startMonitoring(for: region),它会起作用

但仍然存在问题 didEnterRegiondidExitRegion 没有被调用

我的问题是什么

我想跟苹果的文档文章完全一样

最佳答案

从显示的代码中不清楚 CLBeaconRegion.self 在上下文中的含义。请尝试使用定义的区域来查看监控是否可用。

func rangeBeacons(){
let region = CLBeaconRegion(proximityUUID: UUID(uuidString: beacons[0].uuid)!, identifier: beacons[0].identifier)
if CLLocationManager.isMonitoringAvailable(for: region) {
locationManager.startMonitoring(for: region)
}else {
print("CLLocation Monitoring is unavailable")
}
}

实际上,没有真正的理由调用 isMonitoringAvailable。没有这个检查就开始监控。如果由于某种原因失败,您将收到回调:locationManager:monitoringDidFailForRegion:withError

关于ios - 尝试检测信标但失败,因为 isMonitoringAvailable 始终为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49921525/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com