如何计算WatchKit扩展中的当前位置

如何计算手表套件扩展中的当前用户位置,因为我们无法在手表套件中使用CoreLocation

提前致谢

您可以在手表应用程序扩展中使用CoreLocation,非常类似于在iPhone应用程序中使用它。 关键的区别是,用户无法授权您的扩展程序访问核心位置。 他们将需要从你的iPhone应用程序做到这一点。 所以你需要检查用户是否已经为你的应用程序授权了位置服务,如果他们没有,你需要指导他们如何去做。

这里是我在我的手表套件扩展中用来跟踪当前位置的代码。 ( GPWatchAlertView是我用来显示警报消息的自定义控制器。)

 #pragma mark - CLLocation Manager -(void)startTrackingCurrentLocation:(BOOL)forTrip { if (self.locationManager == nil) { self.locationManager = [[CLLocationManager alloc] init]; self.locationManager.delegate = self; self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; self.locationManager.activityType = CLActivityTypeFitness; self.locationManager.distanceFilter = 5; //Require 15 meters of movement before we show an update } CLAuthorizationStatus status = [CLLocationManager authorizationStatus]; if (status == kCLAuthorizationStatusAuthorizedAlways || status == kCLAuthorizationStatusAuthorizedWhenInUse) { NSLog(@"%@ Start tracking current location", self); self.trackingCurrentLocation = YES; self.gpsTrackingForTrip = forTrip; //We wait until we have a GPS point before we start showing it self.showCurrentLocation = NO; [self.locationManager startUpdatingLocation]; } else { [self presentControllerWithName:@"GPWatchAlertView" context:@"Unauthorized GPS Access. Please open Topo Maps+ on your iPhone and tap on current location."]; } } -(void)stopTrackingCurrentLocation:(id)sender { NSLog(@"%@ Stop tracking current location", self); self.trackingCurrentLocation = NO; [self.locationManager stopUpdatingLocation]; self.showCurrentLocation = NO; } -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { CLLocation* loc = [locations lastObject]; ... } 

斯蒂芬的答案应该工作(没有testing过),只有一个例外。 WatchKit需要位置pipe理的“始终”权限。 这是因为您的手机确实在后台模式下运行手表扩展。 因此,如果您只要求“使用时”权限,则永远不会将地点返回到您的手表分机。

尝试改变行:

 if (status == kCLAuthorizationStatusAuthorizedAlways || status == kCLAuthorizationStatusAuthorizedWhenInUse) 

有:

 if (status == kCLAuthorizationStatusAuthorizedAlways) 

你应该得到iphone应用程序的用户位置不扩展。 请检查苹果文件 。