如果 App 在后台时调用 startUpdatingLocation,CLLocation 管理器不会更新位置 [重复]

Posted

技术标签:

【中文标题】如果 App 在后台时调用 startUpdatingLocation,CLLocation 管理器不会更新位置 [重复]【英文标题】:CLLocation manager does not update locations if startUpdatingLocation is called when App is in background [duplicate] 【发布时间】:2016-04-13 10:02:59 【问题描述】:

我在我的应用程序中使用CLLocationManager 并将pausesLocationUpdatesAutomatically 属性设置为YES 以节省电池。当位置暂停时,然后我尝试使用startUpdatingLocation 方法在指定的时间间隔后重新启动位置更新,它启动并给出7 到 10 次位置更新。之后我没有得到任何进一步的位置更新。我调用下面的方法重新开始更新。

PS:我已经在功能中启用了位置背景模式。

[_locManager startUpdatingLocation];
                if ([_locManager respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)])
                
                    _locManager.allowsBackgroundLocationUpdates =YES;
                 

【问题讨论】:

@kb920 请再次阅读我的问题。我已经将此属性设置为 YES。 你使用- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations delegate 方法对吗? @Vvk yes didUpdateLocations 正在使用中。 一一尝试两种方法-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations -(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 我知道的唯一解决方法(我从副本中找到)是在前台调用 startMonitoringSignificantLocationChanges。如果您这样做,那么您似乎可以在后台调用 `startUpdatingLocations 并无限期地获取更新 【参考方案1】:

转到项目构建设置,在目标选择下选择功能 - 打开后台模式 - 选中框位置更新。

我认为这可以解决你的问题。

【讨论】:

该属性已经存在。一旦位置更新由于 pausesLocationUpdatesAutomatically 属性而被操作系统暂停,我的代码将无法工作。 当应用程序进入前台时,它会更新吗? 是的,然后它会更新。 我认为如果您将 pausesLocationUpdatesAutomatically 设置为 yes,那么由于省电方案,它不允许后台执行。 但它在开始时会给出 7 到 10 个位置,但之后它不会给出位置

以上是关于如果 App 在后台时调用 startUpdatingLocation,CLLocation 管理器不会更新位置 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

仅在应用处于后台时调用的静默通知回调方法

从后台调用应用程序时调用方法

当应用程序在后台运行时调用 onMessage 方法

Chrome扩展程序:在URL更新时调用后台

当 ios 应用程序在后台并且有人选择它时调用警报声音,使用核心运动

Android app后台回到前台时的监听