我知道对这个问题的回答是“在info.plist中设置它”但是如果我理解它的工作方式,那么如果用户拒绝你请求的权限,他们就不会再次被提示,除非你有效地阻止你的应用。 ..write代码来检查权限。是对的吗?所以我不知道为什么每个人都像iOS一样自动行事。你仍然需要检查权限,对吧?
假设我是对的,我在哪里可以找到有关如何正确执行此操作的文档。我检查了this(解决方案是插件,我不想使用),this(代码太复杂),this(啰嗦的非答案),和this加上其他几个来自谷歌指向this插件我不喜欢我不想用。我只想要一个关于如何检查和请求iOS权限的文档的链接。有这样的链接吗?
我看起来像这样:
private bool HasLocationPermission()
{
return CoreLocation.CLLocationManager.Status == CoreLocation.CLAuthorizationStatus.Authorized ||
CoreLocation.CLLocationManager.Status == CoreLocation.CLAuthorizationStatus.AuthorizedAlways ||
CoreLocation.CLLocationManager.Status == CoreLocation.CLAuthorizationStatus.AuthorizedWhenInUse;
}
但是,当然,这只是“位置”权限。我没有看到有关LocationManager文档中要检查的内容的任何信息。请求理性还是某种东西?我在哪里可以找到如何做到这一点?请不要插件。
如果你研究了你链接到的权限插件中的代码,你可以很容易地扣除你必须做的事情。
在iOS中有2种不同类型的位置权限,要么它们中的任何一个都可以工作,您需要在Info.plist中设置一些描述,这些描述将在提示权限对话框时显示。
根据您的需要设置NSLocationAlwaysUsageDescription
或NSLocationWhenInUseUsageDescription
。这种模式的区别是。在使用时,用于偶尔需要定位服务,即用于简要地显示地图。虽然总是通常是需要它的应用程序始终跟踪用户位置。
Info.plist
中的部分将类似于:
<key>NSLocationWhenInUseUsageDescription</key>
<string>Do you want My App to access your location?</string>
正如您已经发现的那样,您可以使用CoreLocation
和CLLocationManager
来获取当前的权限状态:
var locationManager = new CLLocationManager();
var status = locationManager.Status;
状态将是:
NotDetermined
- 该应用程序尚未获得许可,或者可能从未被要求过。AuthorizedAlways
- 如果您在使用时请求位置并添加了密钥NSLocationAlwaysUsageDescription
AuthorizedWhenInUse
- 用户说“不,谢谢你”如果您想申请许可,只需致电:
NSLocationWhenInUseUsageDescription
您可以使用Denied
事件收听授权更改:
locationManager.RequestAlwaysAuthorization(); // for always
locationManager.RequestWhenInUseAuthorization(); // for when in use
AuthorizationChanged
将为您提供新的状态。您可能希望在请求权限之前将其连接起来。
locationManager.AuthorizationChanged += OnAuthorizationChanged;
现在您可以开始收听位置更改:
CLAuthorizationChangedEventArgs