How to calculate current location in WatchKit extension

后端 未结 3 1669
天涯浪人
天涯浪人 2020-12-09 13:28

How to calculate the current user location in Watch Kit extension as we can\'t use CoreLocation in watch kit.

Thanks in advance

3条回答
  •  长情又很酷
    2020-12-09 13:59

    You can use CoreLocation in your watch app extension very similarly to how you use it in your iPhone app. The key difference is that a user can't authorize your extension to have access to Core Location. They will need to do that from your iPhone app. So you will need to check if the user has authorized location services for your app and if they haven't, you will need to instruct them how to do it.

    Here is the code I use in my watch kit extension for tracking the current location. (GPWatchAlertView is a custom controller I made to show alert messages.)

    #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];
    
       ... 
    
    }
    

提交回复
热议问题