Xamarin-再次询问设备位置

Xamarin-再次询问设备位置,xamarin,location,xamarin.essentials,Xamarin,Location,Xamarin.essentials,我正在使用Xamarin.Essentials。当我尝试获取最后一个已知位置时,将显示关于设备位置权限的消息。 如果我拒绝该权限,则会捕获PermissionException try { var location = await Geolocation.GetLastKnownLocationAsync(); if (location != null) { await this.Navigation.PushModalAsync(Nav_to_MAP);

我正在使用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
}
如何检查位置并再次触发位置权限消息

try
{
    var location = await Geolocation.GetLastKnownLocationAsync();
    if (location != null)
    {
        await this.Navigation.PushModalAsync(Nav_to_MAP);
    }
}
catch (PermissionException pEx)
{
    // if deny location
}
这是去年开放的,这是詹姆斯·蒙特马诺的回应:

try
{
    var location = await Geolocation.GetLastKnownLocationAsync();
    if (location != null)
    {
        await this.Navigation.PushModalAsync(Nav_to_MAP);
    }
}
catch (PermissionException pEx)
{
    // if deny location
}
现在,它将根据系统的处理方式为您请求权限。在iOS上只能请求一次权限,在Android上可以多次请求。如果用户拒绝,您将得到一个权限被拒绝的异常

try
{
    var location = await Geolocation.GetLastKnownLocationAsync();
    if (location != null)
    {
        await this.Navigation.PushModalAsync(Nav_to_MAP);
    }
}
catch (PermissionException pEx)
{
    // if deny location
}
您现在可以使用权限插件来处理检查和请求

try
{
    var location = await Geolocation.GetLastKnownLocationAsync();
    if (location != null)
    {
        await this.Navigation.PushModalAsync(Nav_to_MAP);
    }
}
catch (PermissionException pEx)
{
    // if deny location
}
我将打开一个新的权限提案,因为它们有点棘手

try
{
    var location = await Geolocation.GetLastKnownLocationAsync();
    if (location != null)
    {
        await this.Navigation.PushModalAsync(Nav_to_MAP);
    }
}
catch (PermissionException pEx)
{
    // if deny location
}
因此,您可以在请求之前使用检查权限。像这样:

try
{
    var location = await Geolocation.GetLastKnownLocationAsync();
    if (location != null)
    {
        await this.Navigation.PushModalAsync(Nav_to_MAP);
    }
}
catch (PermissionException pEx)
{
    // if deny location
}
var status=wait CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Location);
if(status!=PermissionStatus.grated)
{
if(wait CrossPermissions.Current.shouldShowRequestPermissionOriginaleAsync(Permission.Location))
{
等待显示警报(“需要位置”,“Gunna需要该位置”,“确定”);
}
var results=await CrossPermissions.Current.RequestPermissionsAsync(Permission.Location);
//始终检查密钥是否存在的最佳实践
if(results.ContainsKey(Permission.Location))
状态=结果[权限.位置];
}
if(status==PermissionStatus.grated)
{
尝试
{
var location=等待地理位置。GetLastKnownLocationAsync();
如果(位置!=null)
{
等待导航。PushModalAsync(导航至地图);
}
}
捕获(许可异常pEx)
{
//如果拒绝位置
}
}
请参阅有关如何设置它的说明

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