Iphone iOS 7-应用程序进入后台后未调用didUpdateLocations委托
除了我的iPhone设备外,我可以在所有设备(模拟器和iPad设备)上接收位置更新Iphone iOS 7-应用程序进入后台后未调用didUpdateLocations委托,iphone,cocoa-touch,ios7,core-location,Iphone,Cocoa Touch,Ios7,Core Location,除了我的iPhone设备外,我可以在所有设备(模拟器和iPad设备)上接收位置更新 self.locationManager = [[[CLLocationManager alloc] init] autorelease]; self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; self.locationManager.pausesLocationUpdatesAutomatically = NO
self.locationManager = [[[CLLocationManager alloc] init] autorelease];
self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
self.locationManager.pausesLocationUpdatesAutomatically = NO;
self.locationManager.delegate = self;
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
CLLocation *newLocation = locations.lastObject;
NSLog(@"didUpdateLocations newLocation = %@", newLocation);
.
.
}
只要应用程序在前台,我就会收到didUpdateLocations(NSLog消息),但当我按下Home按钮(即应用程序进入后台)后,我就停止在didUpdateLocations中接收通知。“控制台”不会显示NSLog消息,此后,状态栏中的位置图标也会在10秒内消失
什么有效什么无效-
我想我找到了这个问题的原因。iOS 7中的“设置”“应用程序具有常规>“后台应用程序刷新”,该应用程序已关闭:(
当我打开它时,我的应用程序开始在后台运行:)上述解决方案不适用于我在iOS 8.X中的特定情况,因此,我想发布对我有效的解决方案,希望它能帮助其他人 我成功地设置了在前台、后台和挂起状态下接收的静默推送通知。收到PN后,我需要获得位置更新。当应用程序在前台时,我可以这样做,但是,当应用程序在后台时,我无法这样做 我需要做的是在info.plist文件中添加一个名为NSLocationAlwaysUsageDescription的键,并给它一个值。该值可以类似于“您的位置需要在后台” 添加密钥后,我在AppDelegate.m的应用程序:didFinishLaunchingWithOptions:method中添加了这段代码-
// Check for iOS 8.X. Without this guard the code will crash with "unknown selector" on iOS 7.
if([[self locationManager] respondsToSelector:@selector(requestAlwaysAuthorization)])
{
[[self locationManager] requestAlwaysAuthorization];
}
一旦我添加了这两个部分,我就能够成功地在后台获得位置更新
谢谢,
声音如果用户关闭了该功能,请确保您能够优雅地处理,因为我关闭了该设置,因为电池耗尽了对该反馈的渴望。刚才,我和同事讨论了这个问题,我们需要向用户提供适当的反馈,避免不必要的求助电话。你知道如何在应用程序中以编程方式获取这个标志“后台应用程序刷新”值吗?这可能会有所帮助(虽然我没有进行测试):即使是在我删除了上面的注释后偶然发现了相同的帖子<代码>UIApplication.sharedApplication.backgroundRefreshStatus按定义工作。我核实了!!谢谢,我不明白。这只会对重要位置跟踪/访问监控或地理围栏产生影响。它不应该影响正常的位置跟踪。。。