没有网络时不调用 CLLocationManagerDelegate -locationManager(_:startMonitoring:)

Posted

技术标签:

【中文标题】没有网络时不调用 CLLocationManagerDelegate -locationManager(_:startMonitoring:)【英文标题】:CLLocationManagerDelegate -locationManager(_:startMonitoring:) not called when there is no network 【发布时间】:2018-12-04 08:32:24 【问题描述】:

当我在 iPhone 上打开飞行模式时,

func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion)

不再被调用。但是,当我关闭飞行模式时,会调用此委托。

在 CLLocationManager 中这是正常的吗?或者我的属性设置错误。

我已经设置了所有属性。

lazy var locationManager: CLLocationManager = 
    let lm = CLLocationManager()
    lm.allowsBackgroundLocationUpdates = true
    lm.pausesLocationUpdatesAutomatically = false
    lm.showsBackgroundLocationIndicator = true
    lm.delegate = self
    lm.requestAlwaysAuthorization()
    let authorizationStatus = CLLocationManager.authorizationStatus()
    for region in lm.monitoredRegions 
        lm.stopMonitoring(for: region)
    
    return lm
()

locationManager.startMonitoring(for: region)

【问题讨论】:

【参考方案1】:

飞行模式也会关闭 GPS,所以是的,不会接收位置更新,因此预计不会调用 CLLocationManagerDelegate 方法。

【讨论】:

如果重启设备,locationManager的区域会正常工作吗? @DeanLee 退出飞行模式应该可以解决问题,无需重启设备 谢谢,但我的意思是用户注册一个区域然后关闭设备并关闭它,该区域可以正常工作吗?这两个问题之间没有关系。 @DeanLee 那么你应该问一个新问题,如果它与这个问题完全无关并因此回答:)

以上是关于没有网络时不调用 CLLocationManagerDelegate -locationManager(_:startMonitoring:)的主要内容,如果未能解决你的问题,请参考以下文章

为啥观察 LiveData 时不调用 onChanged()

使用 FragmentPagerAdapter 时不调用 Fragment onResume()

inputAccessoryView 出现键盘时不调用

合约中不存在函数时不调用后备函数

为啥将结果添加到 List 时不执行方法调用?

XCTAssertNoThrow 在闭包中调用时不编译