应用终止时停止位置更新

时间:2014-07-16 10:28:43

标签: ios background gps location terminate

我正在开发一个应用程序,当您在升级的地方附近时发送通知。 我的问题是当我去后台然后我退出应用程序时,我不希望当应用程序不起作用时位置服务工作(但我希望它们在后台工作)。

我看到应用程序关闭时只有3个关闭gps的应用程序,我想知道他们是如何做到的,Facebook,谷歌地图和Apple地图,而不是Foursquare,而不是FieldTrips ......

谢谢大家。

3 个答案:

答案 0 :(得分:1)

您可以为UIApplicationWillTerminateNotification添加启动locationManager的观察者,而不是停止位置更新

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(applicationWillTerminate:)
                                                 name:UIApplicationWillTerminateNotification
                                               object:nil];

收到通知时执行的方法

- (void)applicationWillTerminate:(NSNotification *)notification {
//stop location updates
}

答案 1 :(得分:1)

由于@GuyS第二篇文章,我找到了正确的答案:

在AppDelegate.m applicationDidEnterBackground中添加它

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    UIApplication *app = [UIApplication sharedApplication];
    if ([app respondsToSelector:@selector(beginBackgroundTaskWithExpirationHandler:)]) {
        bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
            // Synchronize the cleanup call on the main thread in case
            // the task actually finishes at around the same time.
            dispatch_async(dispatch_get_main_queue(), ^{
                if (bgTask != UIBackgroundTaskInvalid)
                {
                    [app endBackgroundTask:bgTask];
                    bgTask = UIBackgroundTaskInvalid;
                }
            });
        }];
    } 
}

并声明该变量:

UIBackgroundTaskIdentifier bgTask;

之后,您只需在applicationWillTerminate ...

中停止您的位置服务

感谢您的回复。

答案 2 :(得分:0)

@GuyS在本主题中提供的解决方案应该有效。如果应用程序处于后台,我将获得UIApplicationWillTerminateNotification,然后通过向上滑动快照来关闭它。请检查NSNotificationCenter是否正常工作(尤其是添加和删除通知)。另外,当应用程序处于后台时,请检查您在通知上订阅的对象是否存在。

另一个类似的解决方案是在您的UIApplicationDelegate方法中将禁用GPS的代码放入适当的AppDelegate回调中。

- (void)applicationWillTerminate:(UIApplication *)application {
//stop location updates
}