我建立与区域监控的应用程序。它工作正常,在前台,但一旦应用程序在后台发送,它不表现为预期:它不尽快拨打didEnter和didExit但是,当它开始执行其停止回调。在这些回调方法中,我需要轮询服务器并保持didExitRegion和/或didEnterRegion状态。只要我再次将应用程序放在前台,任何排队的请求都会启动并完成。 有什么想法? 我使用的是iPhone 4的iOS的背景区域位置更新
0
A
回答
0
ios5.1和iOS6的你,如果你想活命,要求额外的时间。 请参阅背景模式上的applle文件。有一种方法。 通常你是不是“允许”留在后台对任何任务激活。只针对特定的,如GPS。 尝试在每个区域更新后请求额外的背景时间。
-1
如果您还没有已经添加“位置”到您的Info.plist的UIBackgroundModes。作为第二个想法,我使用AFNetworking这是广泛流行和背景支持。这意味着它将处理设置参数,告诉操作系统它将“在我回去睡觉之前完成这件事”。
2
,当你在后台调用在
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
(或...退出)
只是无论你需要为服务器呼叫建立(变量,有效载荷为服务器等)等)。 之前实际发送开始
self.bgTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:self.bgTaskId];
self.bgTaskId = UIBackgroundTaskInvalid;
somelogger(@"ran out of time for background task");
// remember that we failed for the next time the app comes to the foreground
}];
然后做实际与您所选择的HTTP框架,并在完成处理程序使用重置与
[[UIApplication sharedApplication] endBackgroundTask:self.bgTaskId];
实例后台任务AFNetworking发送:
[self.httpClient postPath:@"state" parameters:@{@"abc": abc, @"value": val, @"h": h, @"app":myAppName , @"version": myAppVersion }
success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (operation.response.statusCode != 200) {
DDLogVerbose(@"response was not 200. error: %i", operation.response.statusCode);
} else {
DDLogVerbose(@"success");
}
[[UIApplication sharedApplication] endBackgroundTask:self.bgTaskId];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
DDLogVerbose(@"request error %@, current retry count %d", error, retryCount);
// start our own retry mechanism
if (retryCount < MAX_RETRIES) {
retryCount++;
double delayInSeconds = RETRY_INTERVAL * (1 + (double)retryCount/10);
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
// try again
});
} else {
// final
[[UIApplication sharedApplication] endBackgroundTask:self.bgTaskId];
// remember failure when app comes back to foreground
}
}];
我正在使用一个
@property (assign, nonatomic) UIBackgroundTaskIdentifier bgTaskId;
来存储背景标识符。
相关问题
- 1. iOS背景位置更新
- 2. 从ios 7的背景更新位置?
- 3. 正确的iOS背景位置更新
- 4. iOS:连续背景位置更新
- 5. 更改背景定位区域
- 6. ios背景位置
- 7. 背景位置iOS
- 8. iOS 10下的背景中的位置和加速计更新
- 9. 背景位置跟踪:iOS
- 10. iOS:降低背景位置更新的频率
- 11. iOS背景位置更新在一段时间后停止
- 12. iOS背景位置更新显示GPS图标整个时间
- 13. 15分钟后背景位置更新不适用于ios?
- 14. 永远背景位置更新ios 8/9
- 15. 更改背景位置onclick
- 16. 位置绘图区域外的传说与背景虚化
- 17. iOS上的固定位置背景
- 18. 背景位置
- 19. 背景位置
- 20. 背景位置
- 21. 重要位置和区域更改更新有何区别?
- 22. c3图表背景区域
- 23. jqplot背景颜色区域?
- 24. Gnuplot绘图区域背景
- 25. iOS 9上的背景更新
- 26. 在iOS背景中获取位置
- 27. 更改div的背景位置,jQuery的
- 28. 背景颜色的背景位置
- 29. onMouseOver更改背景图像的位置
- 30. 在iOS中使用背景位置更新的最佳方式(Swift)
解释我想我读的地方是最大约10分钟...我需要背景连续区域位置更新 – user1170896
您所在地区的更新是连续的,但你的其他任务不是, adter当时接收区域更新请求。 – AlexWien