Plugin.Geolocator выходит из метода (тупик?) - PullRequest
0 голосов
/ 26 марта 2019

Я создаю приложение Xamarin и для геолокации я использую GeolocatorPlugin

Проблема в том, что когда код хочет получить позицию, код существует безпредупреждение.

Мои поля класса:

private Position position;
private IGeolocator locator = CrossGeolocator.Current;

Конструктор моей страницы:

public MainPage()
{
    InitializeComponent();

    locator.PositionChanged += Locator_PositionChanged;
    locator.PositionError += Locator_PositionError;
}

Событие OnAppearing вызывает getLocationPermission:

    private async Task GetLocationPermission()
    {
        var status = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.LocationWhenInUse);
        if (status != PermissionStatus.Granted)
        {
            //Not granted, request permission
            if (await CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.LocationWhenInUse))
            {
                // This is not the actual permission request
                await DisplayAlert("Need your permission", "We need to access your location", "Ok");
            }

            // This is the actual permission request
            var results = await CrossPermissions.Current.RequestPermissionsAsync(Permission.LocationWhenInUse);
            if (results.ContainsKey(Permission.LocationWhenInUse))
                status = results[Permission.LocationWhenInUse];
        }
        //Already granted, go on
        if (status == PermissionStatus.Granted)
        {
            //Granted, get the location
            GetLocation();
            await GetVenues();
            await locator.StartListeningAsync(TimeSpan.FromMinutes(30), 500);
        }
        else
        {
            await DisplayAlert("Access to location denied", "We don't have access to your location.", "OK");
        }
    }

Разрешение предоставляется и попадает в метод GetLocation ():

    private async void GetLocation()
    {
        //var locator = CrossGeolocator.Current;
        try
        {
            var myPosition = await locator.GetPositionAsync();
            position = new Position(myPosition.Latitude, myPosition.Longitude);
        }
        catch (Exception ex)
        {
            throw;
        }
        if (position == null)
        {
            //Handle exception
        }
    }

Как только строка достигается с помощью locator.GetPositionAsync (), она останавливается.Не генерируется никаких исключений, также ошибка PositionError не возникает.

Понятия не имею, почему, но в начале это работало один раз, после этого никогда не работало.

Настройки местоположения в эмуляторе Android следующие:

enter image description here

1 Ответ

0 голосов
/ 27 марта 2019

Основываясь на моих исследованиях, вы не заметили, что Location Changes как эта ссылка

Я написал демо о Location changes.Это запущенный скриншот.

enter image description here

Это мое демо https://github.com/851265601/GeolocationDemo

...