繁体   English   中英

didUpdateLocation未在首次运行时调用

[英]didUpdateLocation not called first time run

我的应用中的定位服务在您首次运行时无法正常工作。 第二次以及之后的任何时间,它都可以正常工作。 这是我的代码:

- (void)viewDidLoad {
[super viewDidLoad];

locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.allowsBackgroundLocationUpdates = true;
[locationManager requestAlwaysAuthorization];

if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedAlways ||
    [CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedWhenInUse) {
    [locationManager startUpdatingLocation];
}
}

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
{
latitude = locationManager.location.coordinate.latitude;
longitude = locationManager.location.coordinate.longitude;
NSLog(@"New Location. Lat: %f, Long: %f", latitude, longitude);
}

问题是requestAlwaysAuthorization是异步运行的,因此在用户授予授权之前,将执行检查授权并调用startUpdatingLocation代码。 这就是为什么第二次可以使用的原因,因为他们是第一次给予许可。 您可以做的是在委托上实现locationManager:didChangeAuthorizationStatus: startUpdatingLocation在那里也调用startUpdatingLocation (如果状态更改为授权)。

来自Apple文档

当当前授权状态为kCLAuthorizationStatusNotDetermined时,此方法异步运行,并提示用户向应用授予使用位置服务的权限

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM