我试图实现它需要检测设备是否位于目标区域(geofence)内部的功能。 如果它位于区域内部,它应该执行一些任务,而不管它处于前景还是背景。iOS区域监控在设备重启后没有明显的位置变化
我能弄清楚大部分零件并实施。
然而,挑战在于用户重新启动设备,而该设备已经位于该区域内部并且不会进行任何重大位置更改。
在这种情况下,iOS似乎没有检测到它是内部还是外部。因此,我的应用程序不会执行任何操作。
那么有没有什么办法让iOS自动检测它是否在地理围栏内或重新启动后没有明显的位置变化?
我试图实现它需要检测设备是否位于目标区域(geofence)内部的功能。 如果它位于区域内部,它应该执行一些任务,而不管它处于前景还是背景。iOS区域监控在设备重启后没有明显的位置变化
我能弄清楚大部分零件并实施。
然而,挑战在于用户重新启动设备,而该设备已经位于该区域内部并且不会进行任何重大位置更改。
在这种情况下,iOS似乎没有检测到它是内部还是外部。因此,我的应用程序不会执行任何操作。
那么有没有什么办法让iOS自动检测它是否在地理围栏内或重新启动后没有明显的位置变化?
首先,你需要调用requestState(for:)
你想咨询区,请注意这将使异步咨询其答复,然后将locationManager(_:didDetermineState:for:)
(locationManager(_:didEnterRegion:)
和locationManager(_:didExitRegion:)
),赶上所以,如果你咨询区的阵列考虑这帐户。
var locationManager = CLLocationManager()
// Do all proper setting for locationManager
...
// Here you make the asynchronous request for the state of a region
locationManager.requestState(for: CLRegion()) // Your region
func locationManager(_ manager: CLLocationManager, didDetermineState state: CLRegionState, forRegion region: CLRegion) {
switch state {
case .inside:
// It's inside the region
case .outside:
// It's outside
default:
// It's unknown
}
}
综上所述,requestState(for:)
是强迫显著变化,而无需移动装置,使所有其他代表将被称为很好,但你的兴趣点是locationManager(_:didDetermineState:for:)
源相当于:https://developer.apple.com/documentation/corelocation/cllocationmanager/1423804-requeststate
感谢您的回复,但只有在iOS设备检测到重大位置更改时才会调用此回调函数。 – androisojavaswift
@androisojavaswift现在尝试我的新方法,让我知道。 –
感谢您的详细信息。你是对的。您建议的方法运作良好,我也使用与您的方法相同的方法。但是这种方法在重启设备后不再工作,因为iOS不会在后台自动启动应用程序并触发requestState(用于:)。 所以我需要弄清楚如何在设备重启后在后台触发requestState(用于:),但不需要用户重新启动应用程序。 – androisojavaswift