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 中的区域监控问题的主要内容,如果未能解决你的问题,请参考以下文章

CoreLocation:一次只监控某些区域

关闭应用程序时的 iOS 7.1 CoreLocation 和地理围栏

如何使用 CoreLocation 自定义信标的邻近区域

如何将 CoreLocation 值从一个 VIewController 传递到 iOS 中的 AppDelegate?

ios 7 中的区域监控

CoreLocation iOS9 存储坐标