didEnterRegion 和 didExitRegion 在 iOS8 中不起作用
didEnterRegion and didExitRegion don't work in iOS8
我正在使用 Core Location 来跟踪区域,以检测用户是否进入或退出该区域。
不幸的是,我的代码在 iOS7 中有效,但在 iOS8 中无效。
这是我正在使用的代码:
func setMonitoredRegion() {
var startLocation: CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: +52.53753000, longitude: +13.35971000)
var monitoredRegion = CLCircularRegion(center: startLocation, radius: 100, identifier: "Region Test")
locationManager.startMonitoringForRegion(monitoredRegion)
}
在delegate方法didStartMonitoringForRegion中开始跟踪region:
func locationManager(manager: CLLocationManager!, didStartMonitoringForRegion region: CLRegion!) {
println("Starting monitoring \(region.identifier)")
}
但是在iOS8中没有调用方法 didEnterRegion 和 didExitRegion:
func locationManager(manager: CLLocationManager!, didEnterRegion region: CLRegion!) {
println("Entered Region \(region.identifier)")
self.showAlertViewWithTitle("Enter Region", message: "The user has entered in monitored region").show()
}
func locationManager(manager: CLLocationManager!, didExitRegion region: CLRegion!) {
println("Exited Region \(region.identifier)")
self.showAlertViewWithTitle("Exit Region", message: "The user has left monitored region").show()
}
此外,我在以下方面没有收到任何错误:
func locationManager(manager: CLLocationManager!, monitoringDidFailForRegion region: CLRegion!, withError error: NSError!) {
println("Error:" + error.localizedDescription)
}
或者:
func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
println("Error:" + error.localizedDescription)
}
在 iOS8 中,我将以下密钥包含在 info.plist 文件中:
NSLocationWhenInUseUsageDescription
并且在代码中我获得了用户授权:
locationManager.requestWhenInUseAuthorization()
有什么想法吗?谢谢。
不要忘记激活通知属性:
self.beaconRegion.notifyOnEntry=YES;
self.beaconRegion.notifyOnExit=YES;
self.beaconRegion.notifyEntryStateOnDisplay=YES;
我已经能够通过在我的 .plist 文件中设置“NSLocationAlwaysUsageDescription”来实现它。
我不确定当应用程序不是 运行 时这是否会增加电池使用量,但这允许我在进入和退出时收到通知...
我正在使用 Core Location 来跟踪区域,以检测用户是否进入或退出该区域。
不幸的是,我的代码在 iOS7 中有效,但在 iOS8 中无效。
这是我正在使用的代码:
func setMonitoredRegion() {
var startLocation: CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: +52.53753000, longitude: +13.35971000)
var monitoredRegion = CLCircularRegion(center: startLocation, radius: 100, identifier: "Region Test")
locationManager.startMonitoringForRegion(monitoredRegion)
}
在delegate方法didStartMonitoringForRegion中开始跟踪region:
func locationManager(manager: CLLocationManager!, didStartMonitoringForRegion region: CLRegion!) {
println("Starting monitoring \(region.identifier)")
}
但是在iOS8中没有调用方法 didEnterRegion 和 didExitRegion:
func locationManager(manager: CLLocationManager!, didEnterRegion region: CLRegion!) {
println("Entered Region \(region.identifier)")
self.showAlertViewWithTitle("Enter Region", message: "The user has entered in monitored region").show()
}
func locationManager(manager: CLLocationManager!, didExitRegion region: CLRegion!) {
println("Exited Region \(region.identifier)")
self.showAlertViewWithTitle("Exit Region", message: "The user has left monitored region").show()
}
此外,我在以下方面没有收到任何错误:
func locationManager(manager: CLLocationManager!, monitoringDidFailForRegion region: CLRegion!, withError error: NSError!) {
println("Error:" + error.localizedDescription)
}
或者:
func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {
println("Error:" + error.localizedDescription)
}
在 iOS8 中,我将以下密钥包含在 info.plist 文件中:
NSLocationWhenInUseUsageDescription
并且在代码中我获得了用户授权:
locationManager.requestWhenInUseAuthorization()
有什么想法吗?谢谢。
不要忘记激活通知属性:
self.beaconRegion.notifyOnEntry=YES;
self.beaconRegion.notifyOnExit=YES;
self.beaconRegion.notifyEntryStateOnDisplay=YES;
我已经能够通过在我的 .plist 文件中设置“NSLocationAlwaysUsageDescription”来实现它。
我不确定当应用程序不是 运行 时这是否会增加电池使用量,但这允许我在进入和退出时收到通知...