我正在处理一个按钮,如果他授予应用程序位置权限,该按钮会将用户发送到地图应用程序。问题是,如果我单击按钮一次并拒绝位置许可,则下次我点击该按钮时该应用程序不会再次请求许可。似乎用户只有一次授予地图权限"。
下面是我用来以编程方式创建带回调函数的按钮的代码。还有"自定义iOS目标属性的屏幕截图"我在其中包含了隐私 - 位置使用说明,以便能够使用用户位置。
directionsButton.addTarget(self, action: #selector(getDirection), for: UIControlEvents.touchUpInside)
func getDirection(sender: UIButton!) {
print("1")
if( CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedWhenInUse ||
CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedAlways){
let url = URL(string: "http://maps.apple.com/?daddr=60.79281049999999,10.688968899999963")
if (UIApplication.shared.canOpenURL(url!)) {
UIApplication.shared.openURL(url!)
} else {
print("Error")
}
print("2")
} else{
LocationManager.requestWhenInUseAuthorization()
print("3")
}
print("4")
}
/*
- Callback function for changes in location permissions
*/
func locationManager(_ manager: CLLocationManager,
didChangeAuthorization status: CLAuthorizationStatus){
print("change in auth")
if( CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedWhenInUse){
let url = URL(string: "http://maps.apple.com/?daddr=60.79281049999999,10.688968899999963")
if (UIApplication.shared.canOpenURL(url!)) {
UIApplication.shared.openURL(url!)
} else {
print("Error")
}
} else{
self.view.makeToast("Couldn't get location permission", duration: 3.0, position: .bottom)
}
}
答案 0 :(得分:3)
似乎用户“只有一次授予地图权限”。
是位置权限的情况,就像地址簿访问权限等其他内容一样。 您的应用程序可以检测到用户之前已拒绝许可,如果是,则告诉他们需要通过设置启用它,并使用一个名为“带我去设置”的按钮等等。 点击按钮,您可以通过以下方式启动应用程序的设置:
UIApplication.shared.open(appSettings as URL, options: [:], completionHandler: { (results) in
...
})