我已成功为我的核心位置应用启用了后台处理功能。为了确保我走在正确的轨道上,这里简要概述了我如何实现进入后台模式:
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和内置地图应用都表明他们当前正在使用位置服务,但实际上两者都没有运行。
有谁知道为什么会这样?可能是因为当我的应用程序进入后台或终止时,我没有正确释放资源?
非常感谢所有答案。
答案 0 :(得分:0)
您可以在NSUserDefaults中保存设置,并使用该设置是否启用后台位置服务。
NSUserDefaults *defaults = [NSUserDefaults standardDefaults];
someFlag = [defaults boolForKey:@"gpsOnOff"];
if (someFlag) {
// enable background services
}