ios - Xamarin 表单:iPhone 设备中未显示位置权限警报
问题描述
我在我的项目中添加了位置权限功能,并且权限警报在 ios 模拟器上运行良好。但在真正的 iPhone 设备中,权限不是要求。
我在 info.plist 文件中添加了位置权限,如下所示。
应用程序设置页面显示除位置之外的所有其他权限详细信息。
我的代码:
public async void ShareLocation()
{
var status = await Permissions.RequestAsync<Permissions.LocationAlways>();
if (status == PermissionStatus.Granted)
{
//Actions
}
}
解决方案
在 iOS 13 中,Apple 对位置权限的行为进行了重大更改,尤其是对于始终允许权限。
在 Xamarin.Forms 中,您可以使用来自 nuget 的插件Permissions Plugin。
用法
try
{
var status = await CrossPermissions.Current.CheckPermissionStatusAsync<LocationPermission>();
if (status != PermissionStatus.Granted)
{
if (await CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.Location))
{
await DisplayAlert("Need location", "Gunna need that location", "OK");
}
status = await CrossPermissions.Current.RequestPermissionAsync<LocationPermission>();
}
if (status == PermissionStatus.Granted)
{
//Query permission
}
else if (status != PermissionStatus.Unknown)
{
//location denied
}
}
catch (Exception ex)
{
//Something went wrong
}
顺便问一下,你的真机上的 iOS 版本是多少?密钥Privacy - Location Always and When In Use 使用说明在 iOS 10.0 之后可用。如果您的 iOS 应用程序在后台运行时访问位置信息,请使用此密钥。如果您的应用在前台只需要位置信息,请改用NSLocationWhenInUseUsageDescription。
推荐阅读
- node.js - 我的应用程序存储了我的令牌,但我无法将其发送到标题
- switch-statement - 如何根据切片器选择更改 Power BI 中折线图的数据颜色
- excel - 返回特定值列表的Excel公式?
- node.js - 如何使用 Node.js 从 InfluxDB 查询数据
- python - 需要密码时如何在 python 中安全地运行自动 paramiko ssh 任务?
- java - 最后一行的字符串没有给出答案
- heroku - PointDNS - Heroku 应用程序上的“名称由另一个帐户管理”
- android - 错误:电子邮件地址格式错误 - React-native - Firebase
- c++ - 如何将类的非静态方法传递给类的数据成员的构造函数
- php - 配置粘贴在共享主机上的 laravel 应用程序中