我能够接收所有(模拟器和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);
.
.
}只要app在前台,我就接收didUpdateLocations (NSLog消息),但是在我按了Home按钮(即app进入后台)之后,我就停止接收didUpdateLocations中的通知。“控制台”不显示NSLog消息,此后,状态栏中的位置图标也在10秒内消失。
什么起作用了什么都不行-
发布于 2013-10-07 18:30:52
我想我找到了这个问题的原因。"Settings“应用程序在iOS 7中具有通用>”后台应用刷新“,该应用程序被关闭:(我一打开"ON",我的应用程序就开始在后台运行:)
发布于 2014-10-20 20:09:13
上面的解决方案不适用于我在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];
}一旦我添加了这两部分,我就能够成功地获得背景中的位置更新。
谢谢,有声的
https://stackoverflow.com/questions/19231905
复制相似问题