CLLocation再次请求许可

时间:2010-11-22 12:16:46

标签: iphone permissions cllocationmanager iphone-sdk-4.1

目前,我的应用程序仅询问一次是否允许使用当前位置。如果用户不允许,除非他在一般设置中重置位置警告,否则不会再次询问。我想让用户有机会在应用程序中稍后授予此权限。换句话说,如果按下某个按钮,对话框应该再次出现。这可能吗?

感谢您的建议。

2 个答案:

答案 0 :(得分:15)

[CLLocationManager locationServicesEnabled]只是告诉您是否在设备上启用了位置服务。

根据this文件。

[CLLocationManager authorizationStatus]

将返回其中一个

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

如果结果为kCLAuthorizationStatusDenied,您可以通过将他发送到settings.app

告诉用户允许使用位置服务

答案 1 :(得分:9)

新答案: 现在在iOS 8中,您可以以编程方式打开设备设置应用程序:

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];

如果您支持早期的iOS版本并希望确保可以处理,请执行以下操作:

if (&UIApplicationOpenSettingsURLString != NULL) {
   NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
   [[UIApplication sharedApplication] openURL:url];
}
else {
  //Earlier iOS version
}

旧答案: 我无法强制显示原生弹出窗口(并允许用户跳转到设置页面)。

您可以使用以下方法确定用户是否允许您的应用提供位置服务: CLLocationManager:

+(CLAuthorizationStatus)authorizationStatus

您还可以查看是否在设备级别全局启用了位置服务: CLLocationManager:

+(BOOL)locationServicesEnabled