2013-07-08 4 views
0

У меня есть приложение, которое использует местоположение устройства. Если они разрешают местоположение, я хочу запустить мой метод getDataFromJson и запустить приложение как обычно. Если они отрицают это или отрицают это раньше, я хочу показать им представление, объясняющее, что им нужно перейти к настройкам и разрешить это.Выяснение того, включены ли службы определения местоположения, не работает

У меня есть много кода, но в данный момент он не работает. Может ли кто-нибудь помочь объяснить, где проблема?

Большое спасибо!

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    if ([CLLocationManager authorizationStatus] == YES) { 
     //are enabled, run the JSON request 
     [self getDataFromJson]; 
    } else { 
     //is not enabled, so set it up 
     NSLog(@"no"); 
     [locationManager location]; 
    }; 

} 

-(CLLocationCoordinate2D) getLocation{ 

    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    locationManager.distanceFilter = kCLDistanceFilterNone; 
    [locationManager startUpdatingLocation]; 
    CLLocation *location = [locationManager location]; 
    CLLocationCoordinate2D coordinate = [location coordinate]; 
    return coordinate; 

} 

-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { 
    if (status == kCLAuthorizationStatusDenied) { 
     //location denied, handle accordingly 
     locationFailView.hidden = NO; 
     mainView.hidden = YES; 
    } 
    else if (status == kCLAuthorizationStatusAuthorized) { 
     //hooray! begin tracking 
     [self getDataFromJson]; 
    } 
} 

//class to convert JSON to NSData 
- (IBAction)getDataFromJson { 
    CLLocationCoordinate2D coordinate = [self getLocation]; 
    NSString *latitude = [NSString stringWithFormat:@"%f", coordinate.latitude]; 
    NSString *longitude = [NSString stringWithFormat:@"%f", coordinate.longitude]; 
    ... 
} 
+1

Когда вы говорите, что это не работает, что конкретно вы имеете в виду? – bdesham

+0

Можете ли вы включить текст аварии? –

+0

Вы должны указать, какой код сбой и какова полная ошибка. – rmaddy

ответ

3
+ (CLAuthorizationStatus)authorizationStatus 

Возвращаемое значение Значение, указывающее, является ли приложение уполномоченным использовать услуги определения местоположения.

Обсуждение Статус авторизации данного приложения управляется системой и определяется несколькими факторами. Приложения должны быть , которые явно уполномочены использовать услуги определения местоположения пользователем, и службы определения местоположения сами должны быть включены в систему. Это разрешение происходит автоматически, когда ваше приложение сначала пытается использовать службы определения местоположения.

+ (BOOL)locationServicesEnabled 

Возвращает логическое значение, указывающее, являются ли услуги определения местоположения включена на устройстве.

Вы можете проверить это два состояния: locationServicesEnabled и authorizationStatus, затем решить, какой метод следует использовать.

AuthorizationStatus должны проверить с состояниями:

typedef enum { 
    kCLAuthorizationStatusNotDetermined = 0, 
    kCLAuthorizationStatusRestricted, 
    kCLAuthorizationStatusDenied, 
    kCLAuthorizationStatusAuthorized 
} CLAuthorizationStatus; 

но вы проверяете равным значению Bool в методе viewDidLoad.

+1

- (BOOL) locationServicesEnabled устарел в iOS 4.0. Используйте вместо этого метод класса locationServicesEnabled - (CLAuthorizationStatus). – Anton

Смежные вопросы

 Смежные вопросы