【问题标题】:CLLocationManager instance method doesn't force Location Services to turn on more than onceCLLocationManager 实例方法不会强制定位服务开启多次
【发布时间】:2019-03-09 16:42:23
【问题描述】:

我正在使用CLLocationManager 类的实例方法requestWhenInUseAuthorization() 强制在用户第一次出现Cancel 后再次出现警告消息Turn On Location Services to Allow "myApp" to Determine Your Location,但警告消息没有出现第二次。谁能解释我的代码哪里出错了?谢谢。

我在UITableViewController 的一个自定义子类中有以下代码;

if (CLLocationManager.locationServicesEnabled() == false) || (CLLocationManager.authorizationStatus() != .authorizedWhenInUse)
{

    self.navigationController!.popViewController(animated: true)

}

这应该强制UITableViewController 的另一个自定义子类的前一个实例在下面的viewDidAppear() 方法中再次显示其视图;

    override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(true)

    // prompts user to turn on location services
    locationManager.requestWhenInUseAuthorization()

}

但它不会导致第二次向用户显示警报消息。 UITableViewController 的两个自定义子类实例都嵌入在我的故事板文件中的 UINavigationController 实例中。

【问题讨论】:

  • 警报显示一次。之后,您需要编写特定于应用程序的代码,检查并提醒用户更改Settings 中的内容(如果他们愿意)。

标签: ios swift location-services


【解决方案1】:

只能向用户请求一次使用位置服务的权限。如果用户拒绝,则无法再次提示他们。来自the documentationrequestWhenInUseAuthorization()

当当前授权状态为notDetermined时,该方法异步运行,提示用户授予应用使用定位服务的权限。

如果当前授权状态不是notDetermined,这个方法什么也不做,也不会调用locationManager(_:didChangeAuthorization:)方法。

要让用户在拒绝后授予您的应用位置权限,他们需要转到其设备上的“设置”应用,找到您的应用,然后在此处启用“位置”权限。您可以通过打开UIApplicationOpenSettingsURLString URL,在您的应用程序中提供指向此设置页面的链接,从而使用户更轻松。

如果您还没有,请查看人机界面指南的 "Requesting Permission" 部分,了解有关此方面的最佳做法。

【讨论】:

  • 好的,谢谢@Defragg。我现在添加了一些额外的代码来处理这种情况;
  • 好的,谢谢@Defragg。我现在已经包含了一些额外的代码来处理这种有效的情况。但是,我现在遇到了强制为用户Allow "myApp" to access your location while you are using the app? 显示第二条警报消息的问题。调用UITableViewController 的第一个自定义子类实例的requestWhenInUseAuthorization() 方法不会强制向用户显示警报。
  • 如果用户曾经看到过您的应用的位置提示,他们将永远不会再看到它,除非他们删除并重新安装您的应用。这是 iOS 内置的有意限制。您无能为力。
【解决方案2】:

您不需要系统警报。 可以通过拨打(等待)locationServicesEnabled() 了解是否启用了定位服务。然后可以显示一个警报请求用户打开它。

【讨论】:

    猜你喜欢
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多