0

我想在每 20 米用户移动中检查用户当前位置。全部处于活动状态和后台。我知道在活动状态下可以这样做。但我想知道在后台模式下做同样的事情是否可以ios.Specially想知道苹果拒绝这个方法。但在ios7我认为没问题

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

我只想在活动状态和背景状态下都这样做。目前我正在使用显着的位置变化和区域监控。但是区域监控的准确性较低。我想要至少 20m 的准确性。这就是为什么我尝试使用上述方法的原因。我知道这种方法会消耗大量电池。但我想要最好的准确性。任何人都有想法。

4

2 回答 2

2

您可以获得用户当前位置,活动状态和后台状态应用程序都不会被拒绝。在 plist 中,您需要设置在后台状态下获取用户位置的请求。设置好后,您的位置管理器代表将继续调用(因此有很多机会很快耗尽电池电量)在一个类/应用程序代理中编写您的位置管理器方法并重用它们,以便您可以轻松检查条件(当每当用户移动它会自动更新用户的位置,这样你就可以检查两点之间的距离,如果用户达到膨胀,那么你可以提示警报)

希望这会有所帮助..

于 2014-04-01T04:27:53.103 回答
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];
}

也可以试试下面的链接: 这里

于 2014-04-01T05:18:05.597 回答