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