如何检查用户是否允许应用程序使用其位置?通常,我会使用 CLLocationManager
类的 authorizationStatus
方法,但它仅适用于 iOS 4.2 及更高版本。在仍然使用 SDK 4.2 的情况下,是否可以以某种方式实现此目标,以便该应用程序仍然可以在旧版 iOS 设备上运行,还是必须降级 SDK?
另外,我需要一个类似的选项来替代 iOS 4.0 之前的 locationServicesEnabled
方法。
如何检查用户是否允许应用程序使用其位置?通常,我会使用 CLLocationManager
类的 authorizationStatus
方法,但它仅适用于 iOS 4.2 及更高版本。在仍然使用 SDK 4.2 的情况下,是否可以以某种方式实现此目标,以便该应用程序仍然可以在旧版 iOS 设备上运行,还是必须降级 SDK?
另外,我需要一个类似的选项来替代 iOS 4.0 之前的 locationServicesEnabled
方法。
-startUpdatingLocation
时,如果用户拒绝了位置服务,则位置管理器委托将收到一个带有错误代码kCLErrorDenied
的-locationManager:didFailWithError:
调用。这适用于所有iOS版本。我在下面的代码中结合了两种技术
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];
}
哦,我没有想到可以使用authorizationStatus
或locationServicesEnabled
。我的做法如下:
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;
}
我很高兴看到有一种更好的方法来检查,但是我检测我的应用程序是否被允许使用GPS的方式还没有出现任何问题。
希望这能帮到您!
[CLLocationManager locationServicesEnabled]
的方式,这样可以避免不必要的调用。 - SpacyRicochet[CLLocationManager locationServicesEnabled]
只是测试设备范围内的位置服务。[CLLocationManager authorizationStatus]
则测试特定应用程序的授权状态。 - NSTJkCLAuthorizationStatusDenied
。 - dclowd9901