首页 > 解决方案 > Xamarin 表单:iPhone 设备中未显示位置权限警报

问题描述

我在我的项目中添加了位置权限功能,并且权限警报在 ios 模拟器上运行良好。但在真正的 iPhone 设备中,权限不是要求。

我在 info.plist 文件中添加了位置权限,如下所示。

在此处输入图像描述

应用程序设置页面显示除位置之外的所有其他权限详细信息。

在此处输入图像描述

我的代码:

public async void ShareLocation()
{
    var status = await Permissions.RequestAsync<Permissions.LocationAlways>();
    if (status == PermissionStatus.Granted)
    {
        //Actions
    }
}

参考:Xamarin Forms:如何在 Xamarin ios 应用程序中检查 GPS 是打开还是关闭?

标签: iosxamarin.formslocation

解决方案


在 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


推荐阅读