CLLocationManager实例方法不会强制位置服务多次打开

问题描述 投票:-1回答:2

我正在使用requestWhenInUseAuthorization()类的实例方法CLLocationManager强制警告消息Turn On Location Services to Allow "myApp" to Determine Your Location在用户首次出现时选择Cancel后第二次出现,但警报消息不会再次出现。任何人都可以解释我在我的代码中出错的地方吗?谢谢。

我在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的两个自定义子类实例都嵌入在storyboard文件中的UINavigationController实例中。

ios swift location-services
2个回答
1
投票

只能询问用户是否允许使用位置服务一次。如果用户拒绝,则无法再次提示他们。来自the documentationrequestWhenInUseAuthorization()

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

如果当前授权状态不是notDetermined,则此方法不执行任何操作,也不会调用locationManager(_:didChangeAuthorization:)方法。

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

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


0
投票

您不需要系统警报。您可以通过调用(等待它)locationServicesEnabled()来确定是否启用了位置服务。然后,您可以提出警告,请求用户将其打开。

© www.soinside.com 2019 - 2024. All rights reserved.