是否可以自动调用locationManager:didUpdateLocations:'用户当前位置更改后的委托方法?

时间:2016-07-15 08:39:09

标签: ios geolocation core-location cllocationmanager location-services

我开发的应用程序即使在后台也需要不断更新用户的位置。使用CLLocationManager,可以在使用位置更改后自动调用locationManager:didUpdateLocations:委托方法。

3 个答案:

答案 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米时,位置管理员会更新您。