How to check if location services are enabled for a particular app prior to iOS 4.2?

后端 未结 3 1324
灰色年华
灰色年华 2020-12-23 16:57

How can I check if the user has allowed location for mu app? Normally I would use authorizationStatus method of the CLLocationManager class, but it

相关标签:
3条回答
  • 2020-12-23 17:27

    Hmm.. I didn't think to use authorizationStatus or locationServicesEnabled. What I did was the following:

    MKUserLocation *userLocation = mapView.userLocation;
    
    if (!userLocation.location) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Location Service Disabled" 
                                                        message:@"To re-enable, please go to Settings and turn on Location Service for this app." 
                                                       delegate:nil 
                                              cancelButtonTitle:@"OK" 
                                              otherButtonTitles:nil];
        [alert show];
        [alert release];
        return;
    }
    

    I'm glad to see there's a better method to check, but I haven't had any problems with the way I detect if my app is allowed to use the GPS.

    Hope this helps!

    0 讨论(0)
  • 2020-12-23 17:33

    When you call -startUpdatingLocation, if location services were denied by the user, the location manager delegate will receive a call to -locationManager:didFailWithError: with the kCLErrorDenied error code. This works both in all versions of iOS.

    0 讨论(0)
  • 2020-12-23 17:37

    I've combined two techniques in the code below

        MKUserLocation *userLocation = map.userLocation;
        BOOL locationAllowed = [CLLocationManager locationServicesEnabled];
        BOOL locationAvailable = userLocation.location!=nil;
    
        if (locationAllowed==NO) {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Location Service Disabled" 
                                                            message:@"To re-enable, please go to Settings and turn on Location Service for this app." 
                                                           delegate:nil 
                                                  cancelButtonTitle:@"OK" 
                                                  otherButtonTitles:nil];
            [alert show];
            [alert release];
        } else {
            if (locationAvailable==NO) 
                [self.map.userLocation addObserver:self forKeyPath:@"location" options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) context:nil];
        }
    
    0 讨论(0)
提交回复
热议问题