iOS8:退出应用程序后不久,蓝条“正在使用你的位置”出现

我想在后台跟踪时得到蓝条,但不是在后台。

我的应用程序一直使用位置服务,所以在iOS8中,我使用CLLocationManager上的requestWhenInUseAuthorization 。 通常,应用在closures时会停止跟踪您的位置,但用户可以select让应用在后台跟踪其位置。 因此,我在Info.plist文件中有UIBackgroundModeslocation选项。 这很好地工作:当切换到后台,应用程序不断获取位置更新,并出现一个蓝色的条形提醒,该应用程序正在使用位置服务。 全部完美。

但问题是,当用户没有select在后台跟踪时,蓝条也会出现。 在这种情况下,我只需在进入后台时停止AppDelegate的位置更新:

 - (void) applicationDidEnterBackground:(UIApplication *)application { if (!trackingInBackground) { [theLocationManager stopUpdatingLocation]; } } 

closures应用程序后,蓝条仅显示一秒钟,但仍然看起来非常恼人。

我知道,使用requestAlwaysAuthorization而不是requestWhenInUseAuthorization将解决问题,但是我根本不会得到任何蓝条,也不是在后台跟踪实际上。

我已经尝试在applicationWillResignActive:方法中已经stopUpdatingLocation ,但这没有什么区别。

有没有人知道如何在后台跟踪时获得蓝条,但是没有时间呢?

我们经常向苹果公司报告,有时他们会采取行动。 正如问题中所描述的,为了防止蓝条出现,Apple在iOS-9的CLLocationManager上引入了一个新的属性。 现在设置它,你知道你将需要在后台的位置:

 theLocationManager.allowsBackgroundLocationUpdates = YES; 

或者以向下兼容的方式:

 if ([theLocationManager respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)]) { [theLocationManager setAllowsBackgroundLocationUpdates:YES]; } 

在Swift中:

 if #available(iOS 9.0, *) { theLocationManager.allowsBackgroundLocationUpdates = true } 

如果此属性未设置,则在退出应用程序时,蓝条不会显示,用户位置不适用于您的应用程序。 请注意,在iOS 9中,您必须设置属性才能在后台使用位置。

请参阅WWDCvideo以获取Apple的解释。

当您启用Background Location Updates并请求iOS 8 when-in-use authorization时,蓝条才会显示。

蓝色栏“正在使用您的位置”出现不久后出现的应用程序

听起来像位置经理不能立即停止。 所以蓝色的酒吧将出现,直到位置经理完全停止。 或者也许这只是一个像Keith所说的错误。

要显示蓝色通知,您需要添加隐私 – 在Plist文件中使用使用说明时的位置(这很重要,Always Location始终没有出现蓝色条)

  self.locationManager.delegate = self; self.locationManager.requestWhenInUseAuthorization() self.locationManager.pausesLocationUpdatesAutomatically = true/false self.locationManager.allowsBackgroundLocationUpdates = true 

然后明星位置: locationManager.startUpdatingLocation()

还要重写方法:

  func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { print(manager.location?.coordinate.latitude ?? "No data") } func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { if status == .authorizedWhenInUse { if CLLocationManager.isMonitoringAvailable(for: CLBeaconRegion.self) { if CLLocationManager.isRangingAvailable() { // do stuff print(manager.location?.coordinate.latitude ?? "No data") locationManager.startUpdatingLocation() } } } } 

记得导入!!:

  import CoreLocation 

还记得委托(CLLocationManagerDelegate)

  class ViewController: UIViewController, CLLocationManagerDelegate{ 

如果您按照以下步骤操作,蓝色条不会出现在背景模式下

  • 在Info.plist中设置NSLocationAlwaysUsageDescription
  • 检查function>后台模式>位置更新
  • 在代码locationManager.requestAlwaysAuthorization()

这不是一个错误,你仍然有一个活跃的位置pipe理器在你的应用程序的某个地方。 你有地图视图与showsUserLocation = YES例如? 这可能是。

我彻底地完成了我的项目,当我停止所有的位置pipe理器时,它应该消失。

要显示您的应用程序正在使用的位置,当您按下homebutton的标题上的蓝条,你必须设置隐私 – 位于Plist文件中的使用说明时的位置

  self.locationManager.delegate = self; locationManager.desiredAccuracy = kCLLocationAccuracyBest self.locationManager.requestWhenInUseAuthorization() self.locationManager.pausesLocationUpdatesAutomatically = true self.locationManager.allowsBackgroundLocationUpdates = true 

当你使用self.locationManager.requestAlwaysAuthorization()时,它将不会显示蓝色标题

你只需要使用self.locationManager.requestWhenInUseAuthorization()那么它会显示蓝色标题,当你的应用程序在后台,你的应用程序正在使用位置

您还必须在目标位置的function中设置背景模式