应用程序进入前台、核心位置、ios 时不会调用 didUpdateLocations

Posted

技术标签:

【中文标题】应用程序进入前台、核心位置、ios 时不会调用 didUpdateLocations【英文标题】:didUpdateLocations does not get called when app enters foreground, core location, ios 【发布时间】:2014-04-15 16:34:21 【问题描述】:

我的目标是每当应用程序进入前台时,我都会获取位置以更新我的天气预报。我要做的是

- (void)viewDidLoad

    [super viewDidLoad];
     self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
    self.locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m


- (void)viewWillAppear:(BOOL)animated

    self.locationManager.delegate = self;
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(enterForeground) name:UIApplicationWillEnterForegroundNotification object:nil];

#pragma mark - Click to get weather
-(void)enterForeground 
    [self.locationManager startUpdatingLocation];


#pragma mark - CLLocationManagerDelegate
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
 NSLog@"didUpdateLocations";

但是,enterForeGround 确实会在我进入前台时被调用,但 didUpdateLocations 不会一直被调用。 我不知道我错过了位置服务的一些关键内容。如果您有任何想法,请给我建议。 谢谢

【问题讨论】:

【参考方案1】:

从不保证会调用 didUpdateLocations。你可以做的是当 viewDidLoad 被调用时,你可以请求最后一个位置。 self.locationManager.location。

您现在可以检查该位置的时间戳和精度。如果数据太旧或无法满足您的需求,则调用 startUpdatingLocation,当您根据过滤器和准确性得到修复时,将调用 didUpdateLocations。

【讨论】:

【参考方案2】:

首先,您需要在后台添加定位服务,方法是转到 Targets -> Capabilities 并在“Background Modes”下选中“Location Updates”。 其次,您需要在适当的地方开始位置更新 [self.locationManager startUpdatingLocation](对于您上面在 viewWillAppear 中提供的代码似乎是最佳选择)

- (void)viewWillAppear:(BOOL)animated

    self.locationManager.delegate = self;
   [self.locationManager startUpdatingLocation]
   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(enterForeground) name:UIApplicationWillEnterForegroundNotification object:nil];

现在,当您的应用进入后台模式并重新进入前台时,应该调用 locationManager 委托方法。

【讨论】:

以上是关于应用程序进入前台、核心位置、ios 时不会调用 didUpdateLocations的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序在 iOS 10 的前台时,不会调用“willPresent 通知”并且本地通知不会显示

仅当应用程序在后台请求位置后进入前台时才调用 didUpdateLocations

当应用程序进入前台时检测远程通知

当应用程序进入前台时,哪个View Controller处于活动状态?

iOS 15 在进入 BLE 信标区域时不会唤醒应用

iOS:减少应用程序进入前台时 UIAlertView 显示的延迟