我开发的应用程序即使在后台也需要不断更新用户的位置。使用CLLocationManager
,可以在使用位置更改后自动调用locationManager:didUpdateLocations:
委托方法。
答案 0 :(得分:0)
您不应该手动呼叫locationManager:didUpdateLocations:
的{{1}}代表。
CLLocationManager
本质上旨在提供延迟的GPS更新以节省电池电量。因此,如果您需要立即更新,请实施locationManager:didUpdateLocations:
而不是。{
locationManager:didUpdateToLocation:fromLocation:
。
您需要做的就是创建一个locationManager:didUpdateLocations:
对象的实例,并将其称为CLLocationManager
方法。
startUpdatingLocation
在此之后,当用户的位置发生变化时,将立即调用 self.locationManager = [[CLLocationManager alloc] init];
[self.locationManager startUpdatingLocation]
。
此外,由于您需要定位背景,请不要忘记在plist中添加相关功能。此外,对于iOS9 +,请不要忘记以下代码段
locationManager:didUpdateToLocation:fromLocation:
注意:如果您实施if (SystemVersionGreaterThanOrEqualTo(@"9.0"))
{
self.locationManager.allowsBackgroundLocationUpdates = YES;
}
,则不会调用locationManager:didUpdateLocations:
。所以不要同时实现它们,只需要你需要的那个。
答案 1 :(得分:0)
您可以按照以下
使用CLLocationManager类的startUpdatingLocation()方法UIBackgroundTaskIdentifier taskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(void) {
// Uh-oh - we took too long. Stop task.
}];
// Perform task here
// Your code
if (taskId != UIBackgroundTaskInvalid) {
[[UIApplication sharedApplication] endBackgroundTask:taskId];
}
当你的viewController的实例在内存中活动时,这个方法将被调用,但是在后台的情况下,OS(iOS)从后台移除应用程序,而其他应用程序没有获得有效的内存空间来执行。
对于后台执行,您可以按照以下
将代码放在后台任务块中navigationView
希望这对您有所帮助:))
答案 2 :(得分:0)
您无需致电
[LocationManager startUpdating];
每次更新位置时,位置管理器都会提供一个简单的解决方案。 您将获得所需的功能
self.locationManager.distanceFilter = 10.0f;
//当位置更改为10米时,位置管理员会更新您。