如何计算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应用程序的用户位置不扩展。 请检查苹果文件 。
- NSXMLParserErrorMessage – 无法打开数据stream
- 更改Apple Watch App的应用程序ID
- 将文本从iOS标签传递到WatchOS标签 – swift-
- parsing和watchkit扩展
- 在WatchOS2中使用WatchConnectivity在iOS和WatchOS之间发送消息
- 当用户停止说话时,如何停止Apple Watch中的语音识别(听写)?
- 如何devise手表应用程序的屏幕像朋友应用程序在手表?
- 知道在Apple Watch Modal Interface Controller中点击取消button时的情况
- 如何使用iPhone在iPhone和Apple Watch之间共享数据?