我正在开发一个应用程序,当您在附近的升级地点时发送通知。 我的问题是,当我去背景,然后我退出应用程序,我不希望位置服务工作时,应用程序不工作(但我希望他们在后台工作)。当应用程序终止时停止位置更新
我只看到3应用时,应用程序关闭时关闭GPS,我想知道他们是怎么做的,Facebook,谷歌地图和苹果地图,不四方,不实地考察...
谢谢每一个人。
我正在开发一个应用程序,当您在附近的升级地点时发送通知。 我的问题是,当我去背景,然后我退出应用程序,我不希望位置服务工作时,应用程序不工作(但我希望他们在后台工作)。当应用程序终止时停止位置更新
我只看到3应用时,应用程序关闭时关闭GPS,我想知道他们是怎么做的,Facebook,谷歌地图和苹果地图,不四方,不实地考察...
谢谢每一个人。
可以为你开始的LocationManager比停止位置更新
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationWillTerminate:)
name:UIApplicationWillTerminateNotification
object:nil];
方法来执行,当您收到通知增加一个观察者
- (void)applicationWillTerminate:(NSNotification *)notification {
//stop location updates
}
我试过了,但不幸的是它并不那么容易......当你关闭应用程序并且你在后台时它没有发送该通知。 –
@JavierPeigneux你测试的方式是什么?当其他应用程序处于前台时,我们会看到' - (void)applicationWillTerminate:(UIApplication *)application'和'UIApplicationWillTerminateNotification',我们通过刷新快照来关闭我们的应用程序。 –
@AlexPeda问题是,当应用程序在后台,然后你通过刷新快照关闭它...我用日志,断点测试它,我有代码来停止在代码的其余部分工作的gps它从来没有在那里工作... –
通过@GuyS在此提供的解决方案主题应该工作。如果应用程序处于后台,我会收到,然后通过刷新快照将其关闭。请检查您是否正确使用NSNotificationCenter
(特别是添加和删除通知)。另外,当应用程序处于后台时,请检查您订阅的对象是否处于活动状态。
另一个类似的解决方案是在您的AppDelegate
方法中将禁用GPS的代码放入合适的UIApplicationDelegate
回调中。
- (void)applicationWillTerminate:(UIApplication *)application {
//stop location updates
}
我找到了正确的回答我的问题becouse @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;
之后,您只需停止applicationWillTerminat中的位置服务e ...
谢谢你的回复。
这应该是一个公认的答案,它解决了当应用程序在后台时调用applicationWillTerminate的问题。 –
根据我的理解,您希望在应用程序退出时删除位置,但在后台运行位置。在'AppDelegate'的'applicationWillTerminate'方法中。您需要添加'stopUpdatingLocation'或'stopMonitoringSignificantLocationChanges'并将位置对象设置为'nil'。也许它会帮助你。 –
对不起,这不是那么容易...当你关闭应用程序,你在后台它不会触发applicationWillTerminate ... –
哦,现在我可以理解你的问题。 :) –