我需要获取并发送位置到服务器,即使应用程序终止,我找到解决方案如何获取位置,但我如何将其发送到服务器 - 我找不到。我想我可以发送它与后台任务,但它如何一起工作,我无法想象,我尝试使用此代码indidFinishLaunchingWithOptions:
if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]) {
// This "afterResume" flag is just to show that he receiving location updates
// are actually from the key "UIApplicationLaunchOptionsLocationKey"
self.shareModel.afterResume = YES;
[self.shareModel startMonitoringLocation];
[self.shareModel addResumeLocationToPList];
UIApplication *application = [UIApplication sharedApplication];
__block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com"]];
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
[[NSUserDefaults standardUserDefaults] setObject:str forKey:@"DOWNLOADTASK"];
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
}
但是我用这个键打印NSUserDefaults是空的,我做错了,可能是我使用了错误的后台任务?
How to Get Location Updates for iOS 7 and 8 Even when the App is Suspended
答案 0 :(得分:0)
根据文件中关于背景描述的苹果,任何应用后台任务执行时间为10分钟.10分钟后,应用程序将被iOS挂断。 但是有五种类型的应用程序允许“无限制”的后台运行时间。
音频。
位置/ GPS。
的VoIP。
报亭。
Exernal Accessory。
您可以为上述五种类型获取任何应用声明,以获得无限时间的背景,但是当您将应用提交到应用商店时,Apple会在您发现“滥用”后端后审核您的应用API,您的应用将被拒绝。 但是,在企业开发的情况下,没有“滥用”问题 - 企业应用程序可以通过OTA部署,而不是通过苹果商店审查。 在企业部署中,你可以成为VoIP应用程序的声明,但程序根本与VoIP无关,我们只为iOS的目的给我们无限的后台执行权限。声明过程是在app Info中。要添加以下密钥的文件: 在文件的第一位,所需的后台模式添加以下两个:在App播放音频或流音频/视频使用AirPlay和App提供IP语音服务。 UIBackgroundModes
VOIP
我测试了以下代码:
- (void)backgroundHandler {
NSLog(@"### -->backgroundinghandler");
UIApplication* app = [UIApplicationsharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
}
通过测试,我收到了“无限”的背景执行时间。我不知道你认为“无限”多久,但在这种情况下,后台任务要运行至少55个小时,直到我失去耐心停止测试。 我的英文很差,这个博客被重印了!
答案 1 :(得分:0)
根据Apple的指南,您无法在暂停或终止状态下执行任何任务。您可以在后台状态下获取位置更新,但在终止或暂停应用时无法执行此操作。请参阅此link和this tutorial以获取后台位置信息。希望这会有所帮助:)