【问题标题】:CLLocation ask again for permissionCLLocation 再次请求许可
【发布时间】:2010-11-22 12:16:46
【问题描述】:

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

感谢您的建议。

【问题讨论】:

  • 可能不会。这就是必须重置位置警告的关键。

标签: iphone permissions cllocationmanager iphone-sdk-4.1


【解决方案1】:

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

根据this文档。

[CLLocationManager authorizationStatus]

将返回其中之一

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

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

【讨论】:

    【解决方案2】:

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

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

    如果您支持早期的 iO​​S 版本并希望确保可以处理此问题,请执行以下操作:

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

    旧答案: 我不知道强制出现本机弹出窗口(并允许用户跳转到设置页面)。

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

    +(CLAuthorizationStatus)authorizationStatus
    

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

    +(BOOL)locationServicesEnabled
    

    【讨论】:

    • 这只是部分准确。 locationServicesEnabled 只会告诉您设备设置,而不是您应用的位置权限。
    猜你喜欢
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2018-01-05
    • 2011-08-19
    相关资源
    最近更新 更多