Xamarin form Задача геолокации отменена, исключение

Я работаю над приложением Xamarin form с проектом andorid, UWP и Windows 8. Я использую плагин Geolocation, созданный Jamesmontemagno, чтобы получить текущее местоположение устройства. Он отлично работает в Windows 8 и UWP, но всякий раз, когда я пытаюсь запустить его на устройстве Android, я получаю исключение отменено задание. Я проверил все разрешения, которые требуются согласно предложению, но все еще не повезло. Мой код для доступа к местоположению ниже

  protected override void OnAppearing()
        {
            var locator = CrossGeolocator.Current;
            locator.DesiredAccuracy = 100; //100 is new default
            if (locator.IsGeolocationAvailable && locator.IsGeolocationEnabled)
            {
                try
                {
                    var position = locator.GetPositionAsync(timeoutMilliseconds: 60000).Result;
                    //var pp = helper.Setting.Location;
                    var Latitude = position.Latitude;
                    var Longitude = position.Longitude;
                }
                catch(Exception ex)
                {
                    var exc = ex;
                }
            }
        }

Ниже изображение для моих настроек для Android манифеста

4 ответа

Решение

Благодаря @Radinator ниже находится рабочее решение.

protected async override void OnAppearing()
        {
            var locator = CrossGeolocator.Current;
            locator.DesiredAccuracy = 100; //100 is new default
            if (locator.IsGeolocationAvailable && locator.IsGeolocationEnabled)
            {
                try
                {
                    await SetLocation();
                }
                catch (Exception ex)
                {
                    var exc = ex;
                }
            }
        }

        private async Task SetLocation()
        {
            var locator = CrossGeolocator.Current;
            locator.DesiredAccuracy = 100; //100 is new default
            if (locator.IsGeolocationAvailable && locator.IsGeolocationEnabled)
            {
                try
                {
                    var position = await locator.GetPositionAsync(timeoutMilliseconds: 60000);

                    var Latitude = position.Latitude;
                    var Longitude = position.Longitude;
                }
                catch (Exception ex)
                {
                    //log ex;
                    throw ex;
                }
            }
        }

Попробуйте использовать await ключевое слово как оно используется в оригинальном коде:

try
{
  var locator = CrossGeolocator.Current;
  locator.DesiredAccuracy = 50;

  var position = await locator.GetPositionAsync (timeoutMilliseconds: 10000);

  Console.WriteLine ("Position Status: {0}", position.Timestamp);
  Console.WriteLine ("Position Latitude: {0}", position.Latitude);
  Console.WriteLine ("Position Longitude: {0}", position.Longitude);
}
catch(Exception ex)
{
  Debug.WriteLine("Unable to get location, may need to increase timeout: " + ex);
}

Это должно позаботиться о том, что нет расы и, следовательно, TaskCancellationException,

Для тех, кто получает тайм-аут даже с await, только на Android, и хотя приложение Google Maps на устройстве работает нормально, вы, вероятно, сталкиваетесь с этой ошибкой, которая возникает только на определенных устройствах Android, но при этом их довольно много.

Проблема старая, которую Google никогда не исправлял. Решение, и одна из возможных причин, по которой приложение Google Maps работает нормально, заключается в том, чтобы использовать надежный сервис определения местоположения Google Play Services.

В настоящее время плагин Geolocator просто использует обычный поставщик местоположения Android, но Джеймс упомянул, что он хотел бы использовать поставщика Fused в какой-то момент. Я все же должен попробовать сам проваленный провайдер.

Столкнулся с проблемой "Задача убита" с v3.0.4. Следующее работало для меня:

  1. Удалить приложение
  2. Обновите Geolocator до предварительной версии 4.0
Другие вопросы по тегам