16

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

谢谢你的建议。

4

2 回答 2

15

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

根据这个文件。

[CLLocationManager authorizationStatus]

将返回其中之一

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

如果结果是kCLAuthorizationStatusDenied您可以通过将他发送到 settings.app 来告诉用户允许使用位置服务

于 2012-09-07T11:04:15.607 回答
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
于 2011-06-30T13:44:26.990 回答