手机锁定约10分钟后,iOS位置管理器停止

当我的应用程序在后台时,我正在尝试获取位置.当我使用我的应用程序时,一切都很好.我也可以切换到任何其他应用程序(甚至是主屏幕)并且位置仍然存在.如果我正在使用我的手机但我的应用程序位于后台位置,只要我的手机处于活动状态,更新似乎就会很好(没有锁定).

但是,如果我锁定手机并在大约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.

点赞