Ios 应用程序终止时停止位置更新
我正在开发一个应用程序,当你在促销地点附近时,它会发送通知。 我的问题是,当我转到后台然后退出应用程序时,我不希望在应用程序不工作时位置服务工作(但我希望它们在后台工作) 我只看到3个应用程序在关闭gps时关闭gps,我想知道它们是如何做到的,Facebook、谷歌地图和苹果地图,不是Foursquare,也不是实地考察Ios 应用程序终止时停止位置更新,ios,background,gps,location,terminate,Ios,Background,Gps,Location,Terminate,我正在开发一个应用程序,当你在促销地点附近时,它会发送通知。 我的问题是,当我转到后台然后退出应用程序时,我不希望在应用程序不工作时位置服务工作(但我希望它们在后台工作) 我只看到3个应用程序在关闭gps时关闭gps,我想知道它们是如何做到的,Facebook、谷歌地图和苹果地图,不是Foursquare,也不是实地考察 谢谢大家。您可以为UIApplicationWillTerminateNotification添加一个观察者,从中启动locationManager,然后停止位置更新 [[NS
谢谢大家。您可以为
UIApplicationWillTerminateNotification
添加一个观察者,从中启动locationManager,然后停止位置更新
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationWillTerminate:)
name:UIApplicationWillTerminateNotification
object:nil];
方法在收到通知时执行
- (void)applicationWillTerminate:(NSNotification *)notification {
//stop location updates
}
@GuyS在本主题中提供的解决方案应该有效。如果应用程序位于后台,我将获得
UIApplicationWillTerminateNotification
,然后我通过滑动快照将其关闭。请检查您是否正确使用NSNotificationCenter
(尤其是添加和删除通知)。另外,当应用程序处于后台时,请检查您在通知中订阅的对象是否处于活动状态
另一个类似的解决方案是将禁用GPS的代码放在uiapplicationelegate
方法中相应的AppDelegate
回调中
- (void)applicationWillTerminate:(UIApplication *)application {
//stop location updates
}
我找到了我问题的正确答案,因为@GuyS第二篇帖子: 将其添加到AppDelegate.m ApplicationIdentinterBackground中
- (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中的位置服务即可
感谢您的回复。据我所知,您希望在应用程序退出时删除位置,但在后台运行位置。对于
application中的方法,将在AppDelegate
中终止方法。您需要添加stopdatinglocation
或stopmonitoringsignifictlocationchanges
,并将location对象设置为nil
。也许对你有帮助。对不起,没那么容易。。。当您关闭应用程序并且您处于后台时,它不会触发应用程序将终止…哦,现在我可以理解您的问题了。:)我试过了,但不幸的是没那么容易。。。当你关闭应用程序而你处于后台时,它没有发送通知。@JavierPeigneux你是如何测试的?我看到当其他应用程序位于前台时,调用了-(void)application willterminate:(UIApplication*)application
和UIApplication willterminateNotification
,我们通过滑动快照来关闭我们的应用程序。@Alexeda问题是当应用程序位于后台时,然后您通过滑动快照来关闭它。。。我用日志、断点对它进行了测试,我有停止gps的代码,它在代码的其余部分工作,但它从来没有在那里工作过……我已经发布了这个主题的新答案。希望这会有帮助。祝你好运:)看看这篇文章:,OP问题的第二点是你正在描述的问题?如果是这样,接受的答案应该解决它。这应该是一个接受的答案,它解决了调用应用程序的问题。当应用程序在后台时,将终止。