在监控CLLocationManager重要位置变化时,App不会重新启动 - iPhone

时间:2012-02-03 19:02:37

标签: objective-c xcode core-location cllocationmanager

我正在开发一个应用程序,以用户自己设置的时间间隔(例如每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 个答案:

答案 0 :(得分:1)

您目前如何查看该应用是否会重新启动?你有记录吗?

该应用将重新启动到后台,因此您不会看到您的应用程序活跃起来。它会在一段时间后自动关闭。您可以使用-[UIApplication beginBackgroundTaskWithExpirationHandler:]完成一些工作并请求更多的后台时间。

SO的另一个答案是some example code。根据您的描述,我看不到任何遗漏,将您的代码与该项目进行比较,看看您是否遗漏了某些内容。