如何在iOS中找到用户在某个位置闲置10分钟?

时间:2014-02-24 06:47:04

标签: ios iphone objective-c mkmapview

如果用户使用以下方法开始移动位置更新,我正在使用寻找路线的地图

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation

现在,如果用户停止移动并在同一个地方停留10分钟,我想显示警报。那么如何在上述方法中检查10分钟的间隔?感谢。

2 个答案:

答案 0 :(得分:3)

首先,我建议您使用- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations,因为iOS 6.0中已弃用locationManager:didUpdateToLocation:fromLocation:。然后在这个方法中你可以使用:

 (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
 { 
   //Cancel perform requests previously 
   //  registered with the performSelector:withObject:afterDelay: 

  [NSObject cancelPreviousPerformRequestsWithTarget:self];
  //Register new perform request to fire after 10 minutes
  [self performSelector:@selector(showAlertOnIdle) withObject:nil afterDelay:600.0];
 }

每次在locations数组中使用新的位置数据时,都会调用此方法。因此,如果用户不断移动选择器将永远不会因为之前的取消而被触发,并且只有在10分钟内没有新的位置数据时才会被调用。

答案 1 :(得分:1)

在您的课程中放置一个NSTimer对象,让我们这样说idleTimer

NSTimer *idleTimer;

正如@Alexander建议的那样,使用didUpdateLocations这样:

(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    //dismiss already running timer as location has been updated..
    if (idleTimer) {
        [idleTimer invalidate];
        idleTimer = nil;
    }

    //start timer
    idleTimer = [NSTimer scheduledTimerWithTimeInterval:600 target:self selector:@selector(idleTimerFired) userInfo:nil repeats:NO];
}

并制作idleTimerFired方法以显示提醒:

- (void)idleTimerFired {
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Alert Title" message:@"Message" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alertView show];
}