当我的应用程序在后台时,我正在尝试获取位置.当我使用我的应用程序时,一切都很好.我也可以切换到任何其他应用程序(甚至是主屏幕)并且位置仍然存在.如果我正在使用我的手机但我的应用程序位于后台位置,只要我的手机处于活动状态,更新似乎就会很好(没有锁定).
但是,如果我锁定手机并在大约10分钟后回来,状态栏中的位置图标和我的应用程序将不再获取位置更新.
我检查了应用程序崩溃,没有崩溃报告.我的应用程序仍然出现在应用程序列表中,所以我认为它不会崩溃.
如果我要求“始终”允许,GPS应该永远保持.或者在手机睡了一段时间后OS会将其关闭吗?
这是我的plist中的条目:
<key>NSLocationAlwaysUsageDescription</key>
<string></string>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>
以下是背景位置服务的屏幕截图:
这是我的自定义类,即位置管理器委托:
@interface LocationDelegate ()
@property (nonatomic, strong) CLLocationManager *locationManager;
@end
@implementation LocationDelegate
+ (instancetype) singleton {
static LocationDelegate *delegate = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
delegate = [[self alloc] init];
});
return delegate;
}
- (id) init {
if (self = [super init]) {
// for now filter and accuracy are based on the same preference
_locationManager = [[CLLocationManager alloc] init];
_locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
_locationManager.delegate = self;
// Check for iOS 8
if ([_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[_locationManager requestAlwaysAuthorization];
}
return self;
}
请注意,它是一个单身人士.那有关系吗?在我的应用程序在后台暂停一段时间或暂停后,此类是否已清理干净?根据我的阅读,我不认为这样的单身人士会被清理干净,因为他们是强有力的参考,所以我不认为这是问题…但我真的不知道为什么我停止获取一定数量的位置后时间.
编辑:
似乎我的位置管理员在一段时间后暂停了位置更新.我没有收到简历的大问题.
我将activityType设置为默认值
CLActivityTypeOther
我可以尝试其他的活动类型,看看是否会有所作为.但是,我依靠我的应用程序来为步行和驾驶工作.
我想我遇到了同样的问题:
iPhone GPS in background never resumes after pause
最佳答案 不,它不一定继续在后台运行.默认情况下,pausesLocationUpdatesAutomatically设置为YES,结合activityType(如果设置)帮助操作系统确定何时可以安全地暂停位置更新以节省电量.您可以实现locationManagerDidPauseLocationUpdates:如果操作系统暂停您的更新,则委派给日志.
另外,为了清楚起见,设置requestAlwaysAuthorization并不意味着locationManager将继续运行,它只是意味着您的应用程序可以从前台或后台或挂起模式启动locationManager.