Форма Xamarin: выпуск GeoLocator - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть одна проблема - географический локатор, который я объявил как 10 сек.затем также в Android: обновляется через 10 или более 10 секунд. В IOS: обновляется каждую секунду.Это мой код:

     public async void CurrentLocation()
    {

        try
        {
            await CrossGeolocator.Current.StartListeningAsync(TimeSpan.FromSeconds(10), 0, true, new Plugin.Geolocator.Abstractions.ListenerSettings
            {
                ActivityType = Plugin.Geolocator.Abstractions.ActivityType.AutomotiveNavigation,
                AllowBackgroundUpdates = true,
                DeferLocationUpdates = true,
                DeferralDistanceMeters = 1,
                //DeferralTime = TimeSpan.FromSeconds(10),
                ListenForSignificantChanges = false,
                PauseLocationUpdatesAutomatically = false

            });
            count++;
            CrossGeolocator.Current.PositionChanged += changedPosition;
        }

Пожалуйста, дайте мне какое-нибудь решение.Заранее спасибо.

1 Ответ

0 голосов
/ 20 сентября 2018

Относительно кода https://github.com/jamesmontemagno/GeolocatorPlugin/blob/master/src/Geolocator.Plugin/Apple/GeolocatorImplementation.apple.cs#L369 minimumTime не реализовано в iOS (по крайней мере, пока).

В фоновом режиме это должно работать, если вы установите DeferralTime = TimeSpan.FromSeconds(10) в качестве docs состояния:

Сводка: если откладывать обновления местоположения, минимальное время, которое должно пройти до доставки обновлений (> = iOS 6).Установите в ноль для неопределенного ожидания.По умолчанию: 5 минут

Значение: время между обновлениями

Таким образом, чтобы обойти вашу ситуацию на переднем плане, вы можете пропустить места, которые вам не нужны в вашем PositionChangedобработчик:

Plugin.Geolocator.Abstractions.Position lastPosition = null;
var timePeriod = TimeSpan.FromSeconds(10);

private void ChangedPosition(object sender, Plugin.Geolocator.Abstractions.PositionEventArgs e)
{
    var lapsed = e.Position.Timestamp - lastPosition.Timestamp;
    lastPosition = e.Position;

    if (lapsed < timePeriod)
        return;

    // your logic
}

это то, что он в основном делает в реализации Android для достижения этой цели.

HIH

...