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

时间:2011-09-20 22:17:52

标签: xcode ios4 core-location background-process

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

1:info.plist:添加了“必需的背景模式”键,其值为“应用寄存器以进行位置更新”

2:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [self.locationManager stopUpdatingLocation];
    [self.locationManager startMonitoringSignificantLocationChanges];
}

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

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    self.locationManager.delegate = self;
    [self.locationManager stopMonitoringSignificantLocationChanges];
    [self.locationManager startUpdatingLocation];
}

这似乎运作良好,因为我在iPhone关机时报告位置。关于这种方法是否被视为“最佳实践”的任何建议都将受到赞赏。

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

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

我的理由是,如果我的用户不想使用我的应用的位置感知部分,我想阻止该应用在后台处理,即使它没有接收位置。

非常感谢任何信息!


感谢您的快速解答。即使我发出

,似乎正在发生的事情
[self.locationManager stopMonitoringSignificantLocationChanges];

[self.locationManager stopUpdatingLocation];

即使我的应用已退出,状态栏上的位置服务箭头仍然保持不变。我也强制终止了它,但是箭头仍然存在。

我也没有其他正在暂停运行的应用。我查看过设置>位置服务> MyApp并看到myApp和内置地图应用都表明他们当前正在使用位置服务,但实际上两者都没有运行。

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

非常感谢所有答案。

1 个答案:

答案 0 :(得分:0)

您可以在NSUserDefaults中保存设置,并使用该设置是否启用后台位置服务。

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

if (someFlag) {
   // enable background services
}