我正在使用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
的两个自定义子类实例都嵌入到我的故事板文件的UINavigationController
实例中。
答案 0 :(得分:1)
只能向用户请求一次使用位置服务的许可。如果用户拒绝,则无法再次提示他们。来自requestWhenInUseAuthorization()
的{{3}}:
当前授权状态为
notDetermined
时,此方法异步运行,并提示用户向应用授予使用位置服务的权限。...
如果当前授权状态不是
notDetermined
,则此方法不执行任何操作,并且不会调用locationManager(_:didChangeAuthorization:)
方法。
要让用户拒绝后授予您的应用程序位置权限,他们需要转到设备上的“设置”应用程序,找到您的应用程序,然后在此处启用“位置”权限。通过打开the documentation,在您的应用程序中提供指向此设置页面的链接,可以使用户更容易做到这一点。
如果还没有,请查看《人机界面指南》的UIApplicationOpenSettingsURLString URL部分,以获取有关此方面的最佳实践。
答案 1 :(得分:0)
您不需要系统警报。 您可以通过调用(等待)locationServicesEnabled()
来确定是否启用了位置服务。然后您可以显示一个警报,请求用户将其打开。