我正在开发一个应用程序,当您在升级的地方附近时发送通知。 我的问题是当我去后台然后我退出应用程序时,我不希望当应用程序不起作用时位置服务工作(但我希望它们在后台工作)。
我看到应用程序关闭时只有3个关闭gps的应用程序,我想知道他们是如何做到的,Facebook,谷歌地图和Apple地图,而不是Foursquare,而不是FieldTrips ......
谢谢大家。
答案 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
}