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

时间:2015-07-01 03:09:54

标签: ios objective-c iphone cllocationmanager

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

但是,如果我锁定手机并在大约10分钟后回来,状态栏中的位置图标和我的应用程序将不再获取位置更新。

我检查了应用程序崩溃,但没有崩溃报告。我的应用程序仍然出现在应用程序列表中,所以我不认为它崩溃了。

如果我要求“永远”,GPS应该永远保持开启状态。允许。或者在手机睡了一段时间后,操作系统会将其关闭吗?

以下是我的plist中的条目:

<key>NSLocationAlwaysUsageDescription</key>
<string></string>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>

以下是背景位置服务的屏幕截图:

enter image description here

这是我的自定义类,即位置管理器委托:

@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

3 个答案:

答案 0 :(得分:3)

不,它不一定继续在后台运行。默认情况下,pausesLocationUpdatesAutomatically设置为YES,结合activityType(如果设置)帮助操作系统确定何时可以安全地暂停位置更新以节省电量。如果操作系统暂停了您的更新,您可以实施locationManagerDidPauseLocationUpdates:委托来记录。

另外,为了清楚起见,设置requestAlwaysAuthorization并不意味着locationManager将继续运行,这只意味着您的应用可以从前台或后台或暂停模式启动locationManager。

答案 1 :(得分:0)

是的,只要您在BackgroundModes中允许它,它就应该保持开启状态,请求NSLocationAlwaysUsageDescription并添加NSLocationAlwaysUsageDescription。但是,Amount必须有描述,您的XML看起来就像没有。显然,您还需要调用startUpdatingLocation。

如果您认为您的单身人士可能是问题的一部分,请尝试将代码移至appDelegate。

答案 2 :(得分:0)

暂停后重启会产生与不让它暂停相同的效果。是的,这是一个电池命中,但我唯一的选择,如果我想让它在用户再次开始移动时运行。