如何计算Watch Kit扩展程序中的当前用户位置,因为我们无法在监视工具包中使用CoreLocation
。
提前致谢
答案 0 :(得分:10)
您可以在手表应用扩展程序中使用CoreLocation,与在iPhone应用中使用它的方式非常相似。关键区别在于用户无法授权您的扩展程序可以访问Core Location。他们需要从你的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];
...
}
答案 1 :(得分:3)
斯蒂芬的答案应该有效(没有经过测试),只有一个例外。 WatchKit需要"始终"该位置的权限管理。这是因为您的手机在后台模式下实际上正在运行手表扩展程序。所以如果你只是要求"何时使用"许可,您永远不会获得返回到您的观看扩展程序的位置。
尝试更改行:
if (status == kCLAuthorizationStatusAuthorizedAlways || status == kCLAuthorizationStatusAuthorizedWhenInUse)
使用:
if (status == kCLAuthorizationStatusAuthorizedAlways)
答案 2 :(得分:1)
你应该在iphone app上获取用户位置而不是扩展名。请检查apple documentation。