我有一个使用设备位置的应用。如果他们允许该位置,我想运行我的方法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];
...
}
答案 0 :(得分:3)
+ (CLAuthorizationStatus)authorizationStatus
返回值表示应用程序是否已获得授权的值 使用位置服务。
讨论管理给定应用程序的授权状态 由系统决定并由几个因素决定。申请必须是 明确授权用户使用位置服务 当前必须为系统启用位置服务。 此授权在您的申请时自动进行 首次尝试使用位置服务。
+ (BOOL)locationServicesEnabled
返回一个布尔值,指示位置服务是否为 在设备上启用。
您可以检查以下两种状态:locationServicesEnabled和authorizationStatus然后决定应该使用哪种方法。
AuthorizationStatus应该检查状态:
typedef enum {
kCLAuthorizationStatusNotDetermined = 0,
kCLAuthorizationStatusRestricted,
kCLAuthorizationStatusDenied,
kCLAuthorizationStatusAuthorized
} CLAuthorizationStatus;
但你在viewDidLoad方法中检查与bool值相等。