我想将应用程序位置权限从whenInUse升级为always。
根据文档,requestAlwaysAuthorization()API可以完成这项工作。 这里的问题是 -
只有在使用永远不会被拒绝的情况下才会提示。这也只能做一次。
有没有办法,我可以确定requestAlwaysAuthorization()由于上述原因而无法显示提示?
可能的解决方案: 当应用程序首次请求许可时,我可以将用户决策存储到UserDefaults中,因此我将第二次了解它的行为。
是否有其他方法可以检查是否已提示提示。
注意:locationManager:didFailWithError:不执行此任务。我已经尝试过了。
答案 0 :(得分:0)
可能这就是你所需要的:
func isLocationServiceAvailable() -> Bool {
if (CLLocationManager.authorizationStatus() == .authorizedWhenInUse || CLLocationManager.authorizationStatus() == .authorizedAlways) {
return true;
}
return false;
}
答案 1 :(得分:0)
您需要检查一个是操作系统级别,另一个是启用了应用级别位置服务。
对于使用以下变量的操作系统级别,您可以操作该值 userdefaults
var osLevellocationServicesEnabled: Bool {
return CLLocationManager.locationServicesEnabled()
}
对于使用以下变量的appLevel,您可以操作值 userdefaults。例如,如果用户始终拒绝权限 使用下面的变量,您可以更新userdefault中的值是/否 相应然后根据你可以提示自定义警报 用户要求手动更新位置设置
var appLevelLocationServicesEnabled: Bool {
return CLLocationManager.authorizationStatus() == .authorizedAlways
}