CoreLocation - iOS 7 中的区域监控问题
Posted
技术标签:
【中文标题】CoreLocation - iOS 7 中的区域监控问题【英文标题】:CoreLocation - region monitoring issue in iOS 7 【发布时间】:2014-01-27 08:12:47 【问题描述】:我的代码适用于 ios 6
。但问题在于 iOS7
只有 didStartMonitoringForRegion
被调用,didEnterRegion 和 didEExitRegion 没有被调用 ....
- (void)viewDidLoad
[super viewDidLoad];
m_pLocatiomManager = [[CLLocationManager alloc] init];
m_pLocatiomManager.desiredAccuracy = kCLLocationAccuracyBest;
m_pLocatiomManager.delegate = self;
[m_pLocatiomManager startMonitoringSignificantLocationChanges];
[m_pLocatiomManager startUpdatingLocation];
添加区域的方法
if ([UIDevice currentDevice].systemVersion.floatValue >= 7.0)
float rad = 200;
CLLocationCoordinate2D startLocation;
startLocation.latitude = 12.9667 ;
startLocation.longitude =77.5667 ;
CLCircularRegion * reg1 = [[CLCircularRegion alloc] initCircularRegionWithCenter:startLocation radius:rad identifier:@"location"];
[m_pLocatiomManager startMonitoringForRegion:reg1];
else
float rad = 200;
CLLocationCoordinate2D startLocation;
startLocation.latitude = 12.9667;
startLocation.longitude = 77.5667;
[m_pLocatiomManager startMonitoringForRegion:[[CLRegion alloc] initCircularRegionWithCenter:startLocation radius:rad identifier:@"location"]];
核心定位代表----
-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
NSLog(@"region entered %@",region.description);
-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
NSLog(@"region exit %@",region.description);
-(void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region
NSLog(@"region monitoring stared");
谢谢。
【问题讨论】:
你是在设备上测试这个吗? 模拟器使用gpx文件 我会尝试在设备上对其进行测试,因为区域监控使用手机信号塔和 wifi 来获取位置修复。在模拟器上测试时我也遇到了问题。另外,如果您还没有这样做,我建议您实施locationManager:monitoringDidFailForRegion:withError
以确保一切正常。
@GadMarkovits 是对的,当您尝试进行区域监控时,模拟器的行为是不可预测的。我很惊讶它可以在 iOS6 上运行。二是不要用那个系统查版本,用苹果提供的developer.apple.com/library/ios/documentation/userexperience/…看底部
【参考方案1】:
我终于解决了这个....
- (void)viewDidLoad
[super viewDidLoad];
m_pLocatiomManager = [[CLLocationManager alloc] init];
m_pLocatiomManager.desiredAccuracy = kCLLocationAccuracyBest;
m_pLocatiomManager.delegate = self;
[m_pLocatiomManager startMonitoringSignificantLocationChanges];
[m_pLocatiomManager startUpdatingLocation];
在方法中添加区域。 . .
if ([UIDevice currentDevice].systemVersion.floatValue >= 7.0)
float rad = 100;
CLLocationCoordinate2D startLocation;
startLocation.latitude = 12.9667 ;
startLocation.longitude =77.5667 ;
CLCircularRegion * reg1 = [[CLCircularRegion alloc] initWithCenter:startLocation radius:rad identifier:@"location"];
[m_pLocatiomManager startMonitoringForRegion:reg1];
else
float rad = 100;
CLLocationCoordinate2D startLocation;
startLocation.latitude = 12.9667;
startLocation.longitude = 77.5667;
[m_pLocatiomManager startMonitoringForRegion:[[CLRegion alloc] initCircularRegionWithCenter:startLocation radius:rad identifier:@"location"]];
【讨论】:
抱歉,有什么不同? @Daniel CLCircularRegion * reg1 = [[CLCircularRegion alloc] initWithCenter:startLocation radius:rad identifier:@"location"]; // 在第二种情况下使用“initWithCenter:radius:identifier”创建对象 @RIYAZ 能否分享与重要位置更改相关的代码。因为我无法让它在 iOS7 上运行。即,如果我的应用程序未处于活动状态,则重要位置更改不起作用。类似于这里提到的问题,***.com/questions/19048526/…以上是关于CoreLocation - iOS 7 中的区域监控问题的主要内容,如果未能解决你的问题,请参考以下文章
关闭应用程序时的 iOS 7.1 CoreLocation 和地理围栏
如何将 CoreLocation 值从一个 VIewController 传递到 iOS 中的 AppDelegate?