Xcode 如何在iOS4中有选择地启用后台处理

Xcode 如何在iOS4中有选择地启用后台处理,xcode,ios4,core-location,background-process,Xcode,Ios4,Core Location,Background Process,我已成功为我的核心位置应用程序启用后台处理。为了确保我在正确的轨道上,这里是我如何实现进入后台模式的快速概述: 1:info.plist:添加键“所需背景模式”,值为“应用程序注册位置更新” 2: 退出后台模式时,我使用以下代码: - (void)applicationWillEnterForeground:(UIApplication *)application { self.locationManager.delegate = self; [self.locationMana

我已成功为我的核心位置应用程序启用后台处理。为了确保我在正确的轨道上,这里是我如何实现进入后台模式的快速概述:

1:info.plist:添加键“所需背景模式”,值为“应用程序注册位置更新”

2:

退出后台模式时,我使用以下代码:

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    self.locationManager.delegate = self;
    [self.locationManager stopMonitoringSignificantLocationChanges];
    [self.locationManager startUpdatingLocation];
}
这似乎工作得很好,因为我在iPhone关机时收到了位置报告。如果您对这种方法是否被视为“最佳实践”有任何建议,我们将不胜感激

我担心的是,即使我的应用程序在iPhone上被明确终止,位置服务箭头仍会显示在状态栏上

我的问题是:是否可以通过编程启用/禁用应用程序的后台处理

我这样做的原因是,如果我的用户不想使用我应用程序的位置感知部分,我希望阻止应用程序在后台处理,即使它没有接收位置

非常感谢您提供的任何信息


谢谢你的及时答复。似乎正在发生的是,即使我

[self.locationManager stopMonitoringSignificantLocationChanges];

即使我的应用程序已退出,状态栏上的位置服务箭头仍会保持打开状态。我也用武力终止了它,但箭头仍然在

我也没有其他应用程序以挂起状态运行。我在“设置”>“位置服务”>“MyApp”中查看了一下,发现MyApp和内置的“地图”应用都表明它们当前正在使用位置服务,但实际上都没有运行

有人知道为什么会这样吗?可能是我的应用程序进入后台或终止时,我没有正确释放资源吗


非常感谢您的回答。

您可以在NSUserDefaults中保存一个设置,并使用该设置来决定是否启用后台位置服务

NSUserDefaults *defaults = [NSUserDefaults standardDefaults];
someFlag = [defaults boolForKey:@"gpsOnOff"];

if (someFlag) {
   // enable background services
}

你的背景实施看起来不错,将被视为“最佳实践”法案。我有一个打开/关闭位置服务的用户默认设置。我不知道您可以通过编程方式打开/关闭实际的后台处理。我以为它只在info.plist里。关于如何在代码中实现它,有什么建议吗?谢谢,您仍然需要手动编写代码,但您可以将状态存储在用户默认值中,以便您可以在AppDel或任何其他需要确定是否使用位置的位置轻松访问它。
[self.locationManager stopUpdatingLocation];
NSUserDefaults *defaults = [NSUserDefaults standardDefaults];
someFlag = [defaults boolForKey:@"gpsOnOff"];

if (someFlag) {
   // enable background services
}