2017-07-28 32 views
0

我试图实现它需要检测设备是否位于目标区域(geofence)内部的功能。 如果它位于区域内部,它应该执行一些任务,而不管它处于前景还是背景。iOS区域监控在设备重启后没有明显的位置变化

我能弄清楚大部分零件并实施。

然而,挑战在于用户重新启动设备,而该设备已经位于该区域内部并且不会进行任何重大位置更改。

在这种情况下,iOS似乎没有检测到它是内部还是外部。因此,我的应用程序不会执行任何操作。

那么有没有什么办法让iOS自动检测它是否在地理围栏内或重新启动后没有明显的位置变化?

回答

0

首先,你需要调用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

+0

感谢您的回复,但只有在iOS设备检测到重大位置更改时才会调用此回调函数。 – androisojavaswift

+0

@androisojavaswift现在尝试我的新方法,让我知道。 –

+0

感谢您的详细信息。你是对的。您建议的方法运作良好,我也使用与您的方法相同的方法。但是这种方法在重启设备后不再工作,因为iOS不会在后台自动启动应用程序并触发requestState(用于:)。 所以我需要弄清楚如何在设备重启后在后台触发requestState(用于:),但不需要用户重新启动应用程序。 – androisojavaswift

相关问题