我想检查每20米用户移动时的用户当前位置。所有处于活动状态和后台。我知道可以在活动状态下执行此操作。但我想知道是否可以执行相同的操作在ios中的背景模式。特别想知道的是苹果拒绝这种方法。但是在ios7中我认为还可以
实际上我想获得醋栗位置,如果用户移动超过1km的呼叫服务API,如果用户每隔20m移动一次检查本地数据库会弹出一些数据。
我想在活动状态和背景状态下都这样做。 目前我使用了显着的位置变化和区域监测。但是区域监测的准确性较低。我希望精度达到20米。 这就是为什么我尝试做上述方法。我知道这种方法会耗费大量电池电量。但我希望准确性最好。 任何人都有想法。
答案 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