我正在开发一个应用程序,以用户自己设置的时间间隔(例如每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尝试保存和检索数据来跟踪应用程序。在前台和后台执行时,它会毫无问题地记录数据。当应用程序未运行时,根本不会保存任何数据。
答案 0 :(得分:1)
您目前如何查看该应用是否会重新启动?你有记录吗?
该应用将重新启动到后台,因此您不会看到您的应用程序活跃起来。它会在一段时间后自动关闭。您可以使用-[UIApplication beginBackgroundTaskWithExpirationHandler:]
完成一些工作并请求更多的后台时间。
SO的另一个答案是some example code。根据您的描述,我看不到任何遗漏,将您的代码与该项目进行比较,看看您是否遗漏了某些内容。