CLLocationManager didEnterRegion未在初始位置触发

时间:2014-03-12 15:06:27

标签: ios objective-c cllocationmanager

我正在创建一个监控后台区域的应用,我可以在应用程序内外收到didEnterRegiondidExitRegion。我的一个问题是,在测试过程中,我有一个区域就在我工作的地方,当我启动应用程序时(我在启动和退出时清除区域)我希望didEnterRegion为这个区域触发,但事实并非如此。显然,系统认为我在该区域内,因为当我移出它时我会收到didExitRegion。如果我然后移回该区域,它将会触发它。“

我在初始化期间尝试使用requestStateForRegion,如下所示:

[self.locationManager startMonitoringForRegion:region];
[self.locationManager requestStateForRegion:region];

然后将回调实现为:

- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
{
    if (state == CLRegionStateInside) {
        [self locationManager:manager didEnterRegion:region];
    }
}

但是这个回调永远不会触发,所以我不知道应该怎么做。

3 个答案:

答案 0 :(得分:0)

这非常简单:正如苹果在文档中所述,只有边界事件才会触发委托方法调用。

但你为什么需要这个呢?如果您了解该地区,您可以在启动应用程序时进行测试,无论您是否在室内,对吧?

如果它是一个圆形区域,你可以继续这样做

CLLocation *myLocation = CURRENT_LOCATION; 
CLCircularRegion* region = YOUR_REGION;
CLLocation *regionCenter = [[CLLocation alloc] initWithLatitude:region.center.latitude longitude:region.center.longitude];

if([region distanceFromLocation:regionCenter]<region.radius)
{
   // YOU ARE IN THE REGION!!
}

或者只是使用:

CLLocation *myLocation = CURRENT_LOCATION; 
CLCircularRegion* region = YOUR_REGION;
if([region containsCoordinate:myLocation.coordinate])
{
   //YOU ARE IN THE REGION!!
}

答案 1 :(得分:0)

您可以尝试[locationMgrObj requestStateForRegion:regionObj]获取didDetermineState中的当前状态。

答案 2 :(得分:0)

我相信你应该打电话

中的[self.locationManager requestStateForRegion:region]

For Index = 0 To 60 Step 1 If WpfWindow("window").Exist(0) Then WpfWindow("window").Activate WpfWindow("window").Type micCapsLockOff WpfWindow("window").Click End If Next