fis*_*ear 38 objective-c core-location ios
我想在后台跟踪时获得蓝色条,但不是时候.
我的应用程序在活动时始终使用位置服务,因此在iOS8中我使用requestWhenInUseAuthorization
on CLLocationManager
.通常情况下,应用会在您关闭时停止跟踪您的位置,但用户可以选择让应用跟踪其在后台的位置的选项.因此,我有location
对选项UIBackgroundModes
中的Info.plist文件.这非常有效:当切换到后台时,应用程序会不断获取位置更新,并显示一个蓝色条,提醒应用程序正在使用位置服务.一切都很完美
但问题是,当用户未选择在后台跟踪时,蓝色条也会出现.在这种情况下,我只需在进入后台时停止AppDelegate的位置更新:
- (void) applicationDidEnterBackground:(UIApplication *)application
{
if (!trackingInBackground) {
[theLocationManager stopUpdatingLocation];
}
}
Run Code Online (Sandbox Code Playgroud)
蓝色条在关闭应用程序后仅显示一秒钟,但它仍然看起来很刺激.
我知道使用requestAlwaysAuthorization
而不是requestWhenInUseAuthorization
将解决问题,但后来我根本不会得到任何蓝色条,也不会在后台跟踪时实际开启.
我已经尝试过stopUpdatingLocation
已经在applicationWillResignActive:
方法中,但这没有任何区别.
有没有人知道如何在后台跟踪时获得蓝条,但不是在没有时?
fis*_*ear 15
我们经常向Apple报告事情,有时他们会对此采取行动.正是为了防止问题中描述的蓝条很快出现,Apple CLLocationManager
在iOS-9中引入了一个新属性.在您知道在后台需要该位置的那一刻设置它:
theLocationManager.allowsBackgroundLocationUpdates = YES;
Run Code Online (Sandbox Code Playgroud)
或者,以向后兼容的方式:
if ([theLocationManager respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)]) {
[theLocationManager setAllowsBackgroundLocationUpdates:YES];
}
Run Code Online (Sandbox Code Playgroud)
在斯威夫特:
if #available(iOS 9.0, *) {
theLocationManager.allowsBackgroundLocationUpdates = true
}
Run Code Online (Sandbox Code Playgroud)
如果未设置此属性,则退出应用时不会显示蓝条,并且您的应用无法使用该用户位置.请注意,在iOS 9中,您必须设置属性才能在后台使用位置.
有关Apple的解释,请参阅WWDC视频.
归档时间: |
|
查看次数: |
9124 次 |
最近记录: |