我正在使用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
实例中。
只能询问用户是否允许使用位置服务一次。如果用户拒绝,则无法再次提示他们。来自the documentation的requestWhenInUseAuthorization()
:
当前授权状态为
notDetermined
时,此方法异步运行并提示用户授予应用程序使用位置服务的权限。…
如果当前授权状态不是
notDetermined
,则此方法不执行任何操作,也不会调用locationManager(_:didChangeAuthorization:)
方法。
要让用户在拒绝后授予您的应用程序位置权限,他们需要转到设备上的“设置”应用,找到您的应用,然后在其中启用“位置”权限。通过打开UIApplicationOpenSettingsURLString URL,您可以在应用程序中为此设置页面提供链接,从而使用户更容易。
如果您还没有,请查看人机界面指南的"Requesting Permission"部分,了解相关的最佳实践。
您不需要系统警报。您可以通过调用(等待它)locationServicesEnabled()
来确定是否启用了位置服务。然后,您可以提出警告,请求用户将其打开。