iOS8:退出应用程序后不久,蓝条“正在使用你的位置”出现
我想在后台跟踪时得到蓝条,但不是在后台。
我的应用程序一直使用位置服务,所以在iOS8中,我使用CLLocationManager
上的requestWhenInUseAuthorization
。 通常,应用在closures时会停止跟踪您的位置,但用户可以select让应用在后台跟踪其位置。 因此,我在Info.plist文件中有UIBackgroundModes
的location
选项。 这很好地工作:当切换到后台,应用程序不断获取位置更新,并出现一个蓝色的条形提醒,该应用程序正在使用位置服务。 全部完美。
但问题是,当用户没有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中设置背景模式