Xamarin - спросите еще раз для местоположения устройства - PullRequest
1 голос
/ 03 апреля 2019

Я использую 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 Ответ

2 голосов
/ 03 апреля 2019

Этот выпуск был открыт в прошлом году, это ответ Джеймса Монтемагно:

Сейчас он запросит у вас разрешение на основании того, как система его обрабатывает. В iOS разрешение можно запросить только один раз, а в Android - несколько раз. Если пользователь откажется, вы получите исключение, в котором отказано в разрешении.

Вы можете использовать Permission Plugin сегодня для обработки проверки и запроса. https://github.com/jamesmontemagno/PermissionsPlugin

Я открою новое предложение для разрешений, поскольку они немного хитры.

Итак, вы можете использовать плагин Permissions для 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
    }
}

См. Документы о том, как его настроить

...