Xamarin — снова запросите местоположение устройства

Я использую 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
}

person doxsi    schedule 03.04.2019    source источник


Ответы (1)


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

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

Вы можете использовать подключаемый модуль разрешений уже сегодня для проверки и запроса https://github.com/jamesmontemagno/PermissionsPlugin

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

Таким образом, вы можете использовать подключаемый модуль разрешений для 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
    }
}

См. Документацию, чтобы узнать, как его настроить.

person Iain Smith    schedule 03.04.2019