CLLocation再次请求权限

16

目前我的应用程序只会在一开始请求一次当前位置的权限。如果用户不同意,除非重新在通用设置中重置位置警告,否则不会再次请求权限。我希望在应用程序内部给用户一个机会稍后授权此权限。换句话说,如果用户按下某个按钮,对话框应该再次出现。这是否可行?

感谢您的建议。


可能不是。这就是需要重置位置警告的原因。 - ryyst
2个回答

15
[CLLocationManager locationServicesEnabled]仅告诉您设备上的位置服务是否已启用。
根据文档。 [CLLocationManager authorizationStatus] 将返回其中之一。
typedef enum {
   kCLAuthorizationStatusNotDetermined = 0,
   kCLAuthorizationStatusRestricted,
   kCLAuthorizationStatusDenied,
   kCLAuthorizationStatusAuthorized
} CLAuthorizationStatus;
如果结果是kCLAuthorizationStatusDenied,你可以告诉用户通过将他送到设置应用程序来允许使用位置服务。

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

这只是部分准确的。locationServicesEnabled 只会告诉您设备的设置情况,而不是您的应用程序位置权限的情况。 - Acey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接