iOS9中的背景中的定期位置

时间:2015-12-30 17:12:13

标签: ios iphone location background-process

我尝试使用locationManager在后​​台每隔"时间间隔跟踪位置"当应用程序在后台时。

它在iOS 8 iPhone 6上运行良好 - 但是在iOS 9 iPhone 6s中,我在2.5到3分钟后不断被终止。

我的主要问题是 - iPhone 6 iOS 8和iOS iOS 9有什么区别?更好的看门狗计时器用于后台任务?如果是这样我怎么解决这个问题?

我播下的解决方案包括降低准确性以节省电池寿命而不是时间间隔,我不希望这样,因为用户始终看到位置监控指示(全箭头)。

我的一些代码 -

-(void)initialize
{
    self.locationManager  = [[CLLocationManager alloc]init];
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
    self.locationManager.distanceFilter = 5;
    self.locationManager.delegate = self;

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(addMonitorsBeforeWillTerminate)
                                                 name:UIApplicationWillTerminateNotification
                                               object:nil];

    [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidEnterBackgroundNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {
        [[UIApplication sharedApplication]beginBackgroundTaskWithExpirationHandler:nil];
    }];
      [self.locationManager startUpdatingLocation];
    }

感谢

3 个答案:

答案 0 :(得分:0)

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)


 if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")){


    [self.locationManager setAllowsBackgroundLocationUpdates:YES];

}

可以在以下link中找到更多深度和广度信息。

答案 1 :(得分:0)

我推荐两种选择。

  1. 在后台切换到kCLLocationAccuracyThreeKilometers。这将关闭GPS并且不会耗尽电池,因为它只会使用电池信息。请求后台位置服务的权限并创建NSTimer回调(这将使您的应用程序在BG中运行)。在回调切换到所需的精度内,更新位置然后再次切换回低精度。
  2. 注册重要的位置更改。但是,每隔X分钟就不会通知您的应用。

答案 2 :(得分:0)

然而,无论如何在未来挣扎,答案来自" technerd"通过评论,我把它变成了答案 -

https://github.com/voyage11/Location