可以在后台运行CLLocationManager

时间:2014-04-01 03:53:11

标签: ios iphone geolocation cllocationmanager clregion

我想检查每20米用户移动时的用户当前位置。所有处于活动状态和后台。我知道可以在活动状态下执行此操作。但我想知道是否可以执行相同的操作在ios中的背景模式。特别想知道的是苹果拒绝这种方法。但是在ios7中我认为还可以

实际上我想获得醋栗位置,如果用户移动超过1km的呼叫服务API,如果用户每隔20m移动一次检查本地数据库会弹出一些数据。

我想在活动状态和背景状态下都这样做。 目前我使用了显着的位置变化和区域监测。但是区域监测的准确性较低。我希望精度达到20米。 这就是为什么我尝试做上述方法。我知道这种方法会耗费大量电池电量。但我希望准确性最好。 任何人都有想法。

2 个答案:

答案 0 :(得分:2)

您可以获取用户当前位置,活动状态和后台状态应用都不会被拒绝。 在plist中,您需要设置获取用户位置处于后台状态的请求。设置完毕后,您的位置管理员代表将继续通话(因此有很多机会快速耗尽电量)在一个类/ appdelegate中编写您的位置管理器方法并重复使用它们,以便您可以轻松检查条件(何时如果用户移动它会自动更新用户的位置,这样你就可以检查两点之间的距离,如果用户到达了扩张状态,你可以提示警报)

希望这会有所帮助..

答案 1 :(得分:1)

在AppDelegate.m文件中

- (void)applicationDidEnterBackground:(UIApplication *)application{
    UIApplication* app = [UIApplication sharedApplication];
   UIApplication *bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    }];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSTimer* t = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(al) userInfo:nil repeats:NO];
        [[NSRunLoop currentRunLoop] addTimer:t forMode:NSDefaultRunLoopMode];
        [[NSRunLoop currentRunLoop] run];
    });
}
-(void)al{
    yourViewController *navigation=[[yourViewController alloc]initWithNibName:@"yourViewController" bundle:nil];
    [navigation.locationManager startMonitoringSignificantLocationChanges];
}

还可以尝试以下链接: here