监控 CLLocationManager 重大位置更改时应用程序不会重新启动 - iPhone

Posted

技术标签:

【中文标题】监控 CLLocationManager 重大位置更改时应用程序不会重新启动 - iPhone【英文标题】:App won't relaunch when monitoring CLLocationManager significant location changes - iPhone 【发布时间】:2012-02-03 19:02:37 【问题描述】:

我正在开发一个应用程序,它以用户自己设置的时间间隔(例如每 5 分钟)跟踪用户的位置,并通过ASIHTTPRequest 将其发送到服务器页面。

此应用应该能够在前台接收更新,无论是在后台还是在应用未运行时(定位服务)。 虽然我的应用在前台和后台成功接收到更新,但它似乎没有在不运行时唤醒,也没有向服务器发送任何请求。

我正在使用CLLocationManager 及其代表在后台执行startMonitoringSignificantLocationChanges

Settings 上,Location Services 中的我的应用程序图标按预期显示带有紫色箭头。

在我的info.plist 上,我根据需要和方法设置了Required Background Modes 项目locations

locationManager:didUpdateToLocation:fromLocation:
locationManager:didFailWithError:

已实现。

我的方法:

(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

也实现并检查是否launchOptions 包含UIApplicationLaunchOptions- LocationKey,然后开始监视重要位置以了解何时唤醒/重新启动。

有什么方法可以查明我的应用是否真的重新启动了? 是否需要设置任何额外的配置才能使其正常工作?

如果我需要提供任何其他信息,请告诉我。


我正在使用的规格: SDK Xcode 4.2.1 CLLocation 位于 Singleton 类中(在可能影响的地方读取) ios 部署目标:4.3 在 Iphone 3GS、4 和 Xcode 的 iOS 5 模拟器上进行测试,所有这些设备都会发生相同的行为。 设备:通用


更新

我在-[UIApplication beginBackgroundTaskWithExpirationHandler:] 中插入了我的代码,并尝试使用UIBackgroundTaskInvalid 检查错误。不过好像连(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法都没有进入。

我通过尝试使用 SQLite 保存和检索数据来跟踪应用程序。在前台和后台执行时,它记录数据没有问题。当应用程序未运行时,根本不会保存任何数据。

【问题讨论】:

【参考方案1】:

您目前如何检查应用是否重新启动?你在记录什么吗?

应用程序将重新启动到后台,因此您不会看到自己的应用程序启动。它实际上会在一段时间后自动关闭。您可以使用-[UIApplication beginBackgroundTaskWithExpirationHandler:] 做一些工作并请求更多后台时间。

另一个答案在这里发布some example code。根据您的描述,我看不出有任何遗漏,请将您的代码与该项目进行比较,看看您是否遗漏了什么。

【讨论】:

嗨 Joris,感谢您的快速回复,我在帖子上发布了更新,以便我可以写更多内容。 谢谢 Joris,这最终成为了问题。我的后台任务耗时太长。

以上是关于监控 CLLocationManager 重大位置更改时应用程序不会重新启动 - iPhone的主要内容,如果未能解决你的问题,请参考以下文章

iOS CLLocationManager - 手动进行区域监控

每次 viewWillAppear 发生重大位置变化时调用 didUpdateLocations

目标 c - 重大的位置变化

监控重大位置变化时是不是可以推迟位置更新?

应用在后台时启动 CLLocationManager 位置更新

核心位置区域监控