gpt4 book ai didi

ios - 定期 iOS 后台位置更新

转载 作者:IT老高 更新时间:2023-10-28 11:20:49 30 4
gpt4 key购买 nike

我正在编写一个需要以高精度和低频率进行后台位置更新的应用程序。解决方案似乎是一个后台 NSTimer 任务,它启动位置管理器的更新,然后立即关闭。之前有人问过这个问题:

How do I get a background location update every n minutes in my iOS application?

Getting user location every n minutes after app goes to background

iOS Not the typical background location tracking timer issue

iOS long-running background timer with "location" background mode

iOS full-time background-service based on location tracking

但我还没有得到一个最小示例工作。在尝试了上述接受的答案的每一种排列之后,我把一个起点放在一起。进入后台:

- (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];
}

和委托(delegate)方法:

- (void)locationManager:(CLLocationManager *)manager 
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {

NSLog(@"%@", newLocation);

NSLog(@"background time: %f", [UIApplication sharedApplication].backgroundTimeRemaining);
[self.locationManager stopUpdatingLocation];

}

当前的行为是 backgroundTimeRemaining 从 180 秒递减到零(在记录位置时),然后执行过期处理程序并且不会生成进一步的位置更新。如何修改上述代码以在后台无限期地接收定期位置更新

更新:我的目标是 iOS 7,似乎有证据表明后台任务的行为有所不同:

Start Location Manager in iOS 7 from background task

最佳答案

似乎 stopUpdatingLocation 是触发后台看门狗定时器的原因,所以我在 didUpdateLocation 中将其替换为:

[self.locationManager setDesiredAccuracy:kCLLocationAccuracyThreeKilometers];
[self.locationManager setDistanceFilter:99999];

这似乎有效地关闭了 GPS。背景 NSTimer 的选择器就变成了:

- (void) changeAccuracy {
[self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
[self.locationManager setDistanceFilter:kCLDistanceFilterNone];
}

我所做的只是每隔几分钟定期切换精度以获得高精度坐标,并且由于 locationManager 没有停止,backgroundTimeRemaining 停留在其最大值。这将我设备上的电池消耗从每小时约 10%(在后台使用恒定的 kCLLocationAccuracyBest)降低到每小时约 2%。

关于ios - 定期 iOS 后台位置更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19042894/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com