监控 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