我正在编写一个需要高精度和低频率的背景位置更新的应用程序.该解决方案似乎是一个后台NSTimer任务,它启动位置管理器的更新,然后立即关闭.之前已经问过这个问题:
但我还没有得到最起码的例子.在尝试了上述接受的答案的每一个排列后,我总结了一个起点.输入背景:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
self.bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
NSLog(@"ending background task");
[[UIApplication sharedApplication] endBackgroundTask:self.bgTask];
self.bgTask = UIBackgroundTaskInvalid;
}];
self.timer = [NSTimer scheduledTimerWithTimeInterval:60
target:self.locationManager
selector:@selector(startUpdatingLocation)
userInfo:nil
repeats:YES];
}
Run Code Online (Sandbox Code Playgroud)
和委托方法:
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
NSLog(@"%@", newLocation);
NSLog(@"background time: %f", [UIApplication sharedApplication].backgroundTimeRemaining);
[self.locationManager stopUpdatingLocation];
}
Run Code Online (Sandbox Code Playgroud)
当前行为是backgroundTimeRemaining
从180秒减少到零(记录位置时),然后执行到期处理程序,不再生成进一步的位置更新.如何修改上述代码以便在后台无限期地接收定期位置更新?
更新:我的目标是iOS 7,似乎有一些证据表明后台任务的行为有所不同:
objective-c core-location ios background-task ios-background-mode
我想使用我的应用用户的位置,更具体地说是纬度和经度值.
我需要它们在变量中使用,以便我可以使用url发送它们...
我从来没有在iOS和Xcode上的位置工作过,发现我在互联网上的问题没有任何匹配...
所以我希望有人可以用代码示例向我解释:)
谢谢你帮助Laurenz来自德国
我正在制作应用程序.它提供每一小时后获取数据的功能.所以,即使我的应用程序终止,我怎么能调用该功能?
经过太多的搜索,我发现通过后台获取performFetchWithCompletionHandler,但我想知道,如果我的应用程序被终止,此功能将工作?我的意思是,如果我的应用程序处于关闭或终止状态,我怎么能自动调用函数?
我想实现长时间运行的后台计时器,它定期向服务器发送用户的位置.
为此,我设置了location
模式UIBackgroundModes
,并beginBackgroundTaskWithExpirationHandler
在应用程序转到后台时调用.因为CLLocationManager
,我使用startUpdatingLocation
方法(不想使用重大改变,因为我需要高精度位置).
但是在应用程序进入后台后大约26分钟,它会停止向服务器发送位置.但该应用程序没有崩溃,所以在我将应用程序带到前台后,它可以恢复其计时器.
26分钟来自实验,iOS 6.1,iPhone 5.
这是一些问题,
我无法理解为什么它在26分钟而不是10分钟后暂停,这被称为后台任务的时间限制.
在16分钟之前,backgroundTimeRemaining
方法返回double max value.但是在16 600
分钟后,它会减少,所以它会在10分钟后暂停后台任务.
我已经尝试beginBackgroundTaskWithExpirationHandler
在expiration处理程序内调用,但没有用.
如果有人对此问题有所了解,将不胜感激.
ios ×4
background ×1
cocoa-touch ×1
geolocation ×1
ios9 ×1
location ×1
objective-c ×1
swift ×1