微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

监控信标时会多次调用 DidEnterRegion 和 DidExitRegion

如何解决监控信标时会多次调用 DidEnterRegion 和 DidExitRegion

这是我的简单代码,我试图在其中监视进入/退出事件。 我面临的问题:DidEnterRegion 和 DidExitRegion 被多次调用:第一个 - 当它实际发生时,另一个调用 - 当我来到后台,然后在第一次调用后约 15-30 秒的范围内返回到前台DidEnterRegion/DidExitRegion

这个触发的原因是什么?为什么会发生这种情况?

class AppDelegate: UIResponder,UIApplicationDelegate,CLLocationManagerDelegate {
    var window: UIWindow?

    var locationManager = CLLocationManager()
    var beaconRegion: CLBeaconRegion!

    func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        confugureLocationManager()
        configureRegion()

        return true
    }

    private func confugureLocationManager() {
        locationManager.delegate = self

        if CLLocationManager.authorizationStatus() != .authorizedAlways {
            locationManager.requestAlwaysAuthorization()
        }

        print("monitored regions: \(String(describing: locationManager.monitoredRegions))")
    }

    private func configureRegion() {
        let uuid = UUID(uuidString: "04C7E2F3-42A5-5127-B066-502C8A27EB85")!
        beaconRegion = CLBeaconRegion(uuid: uuid,identifier: uuid.uuidString)
    }

    func locationManager(_ manager: CLLocationManager,didChangeAuthorization status: CLAuthorizationStatus) {
        if status == .authorizedAlways {
            if CLLocationManager.isMonitoringAvailable(for: CLBeaconRegion.self) {
                locationManager.startMonitoring(for: beaconRegion)
            }
        }
    }

    func locationManager(_ manager: CLLocationManager,didDetermineState state: CLRegionState,for region: CLRegion) {
        if state == .inside {
            print("Did determine INSIDE state for region.")
        } else {
            if state == .outside {
            print("Did determine OUTSIDE state for region.")
            }

            if state == .unkNown {
                print("Did determine UNKNowN state for region.")
            }
        }
    }

    func locationManager(_ manager: CLLocationManager,didStartMonitoringFor region: CLRegion) {
        print("did start monitoring")
    }

    func locationManager(_ manager: CLLocationManager,didEnterRegion region: CLRegion) {
        print("Did enter region: \(region.identifier),manager: \(manager)")
    }

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。