Xamarin-再次询问设备位置

时间:2019-04-03 09:57:09

标签: xamarin location xamarin.essentials

我正在使用Xamarin.Essentials。当我尝试获取最近的已知位置时,将显示有关设备位置权限的消息。 如果我拒绝许可,PermissionException将被捕获。

如何检查位置并再次触发位置许可消息?

try
{
    var location = await Geolocation.GetLastKnownLocationAsync();
    if (location != null)
    {
        await this.Navigation.PushModalAsync(Nav_to_MAP);
    }
}
catch (PermissionException pEx)
{
    // if deny location
}

1 个答案:

答案 0 :(得分:2)

issue于去年开业,这是詹姆斯·蒙特马格诺的回应:

  

现在,它将根据系统处理方式为您请求权限。在iOS上,仅可以请求一次权限,而在Android上,可以多次请求。如果用户拒绝,您将获得一个权限被拒绝的例外。

     

您今天可以使用权限插件来处理检查和请求   https://github.com/jamesmontemagno/PermissionsPlugin

     

我将打开一个新的权限提案,因为它们有些棘手。

因此,您可以使用Permissions Plugin for Xamarin来检查权限,然后再询问。像这样:

var status = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Location);
if (status != PermissionStatus.Granted)
{
    if (await CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.Location))
    {
        await DisplayAlert("Need location", "Gunna need that location", "OK");
    }

    var results = await CrossPermissions.Current.RequestPermissionsAsync(Permission.Location);
    //Best practice to always check that the key exists
    if (results.ContainsKey(Permission.Location))
        status = results[Permission.Location];
}

if (status == PermissionStatus.Granted)
{
    try
    {
        var location = await Geolocation.GetLastKnownLocationAsync();
        if (location != null)
        {
            await Navigation.PushModalAsync(Nav_to_MAP);
        }
    }
    catch (PermissionException pEx)
    {
        // if deny location
    }
}

有关如何设置的信息,请参见Docs