一、配置高德或百度的后台定位框架和代码(略)。
二、配置app不被系统kill,定时获取地理位置信息,并上传服务器(AppDelegate里面)。
具体代码:
1、
- (void)applicationDidEnterBackground:(UIApplication *)application { //控制定时器不被kill UIApplication * app = [UIApplication sharedApplication]; __block UIBackgroundTaskIdentifier bgTask; bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ dispatch_async(dispatch_get_main_queue(), ^{ if (bgTask != UIBackgroundTaskInvalid) { bgTask = UIBackgroundTaskInvalid; } }); }]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ dispatch_async(dispatch_get_main_queue(), ^{ if (bgTask != UIBackgroundTaskInvalid) { bgTask = UIBackgroundTaskInvalid ; } }); }); }
2、
{ //全局计时器 NSTimer * timer; }
-(void)turnOnTimer{ //14400.0 秒调用一次 timer = [NSTimer scheduledTimerWithTimeInterval:14400.0 target:self selector:@selector(pushGPSdata) userInfo:nil repeats:YES]; [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; }
3、
-(void)pushGPSdata{ //_dicUrl 全局保存定位信息 NSString * cityName = [NSString stringWithFormat:@"%@",_dicUrl[@"cityName"]]; NSString * latitude = [NSString stringWithFormat:@"%@",_dicUrl[@"latitude"]]; NSString * longitude = [NSString stringWithFormat:@"%@",_dicUrl[@"longitude"]]; if (cityName.length !=0&&latitude.length !=0&&longitude.length !=0) { [self pushGPS:_dicUrl]; } } -(void)pushGPS:(NSMutableDictionary*)dic{ [com afPostRequestWithUrlString:trail_Url parms:dic finishedBlock:^(id responseObj) { NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObj options:NSJSONReadingMutableLeaves error:nil]; NSLog(@"%@",dic[@"message"]); NSString * userStatus = [NSString stringWithFormat:@"%@",dic[@"success"]]; if ([userStatus isEqualToString:@"1"]) { NSLog(@"GPS成功"); }else{ NSLog(@"GPS失败"); } } failedBlock:^(NSString *errorMsg) { }]; }