我能够在所有(模拟器和iPad设备)上接收位置更新,但我的iPhone设备。
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秒内消失。
什么不起作用 -
似乎在我的其他iPhone 3gs上安装的iOS 6运行正常。小位置图标不会消失。
使用iOS 7在iPad设备上测试,应用程序在后台继续运行。
iOS 6以及iOS 7的所有模拟器(iPhone和iPad)均按预期工作。
当我在带有iOS 7的iPhone 4上测试时,该应用程序无法在后台运行。所以可能,这个问题仅适用于iOS 7(甚至某些特定的iPhone设备)。
答案 0 :(得分:3)
我想我找到了这个问题的原因。 iOS 7中的“设置”应用具有常规> “后台应用刷新”已关闭:( 我一打开它“开启”,我的应用就开始在后台运行了:)
答案 1 :(得分:0)
上述解决方案对于我在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];
}
一旦我添加了这两件,我就能在后台成功获得位置更新。
谢谢, 可听