void Finish(Android.Locations.Location location) { var position = location.ToGeoPosition(); OnFinished?.Invoke(); CompletionSource.TrySetResult(position); }
public void OnLocationChanged(Android.Locations.Location location) { if (location.Provider != ActiveProvider) { if (ActiveProvider != null && Manager.IsProviderEnabled(ActiveProvider)) { var lapsed = ToTime(location.Time) - ToTime(LatestLocation.Time); if (Manager.GetProvider(location.Provider).Accuracy > Manager.GetProvider(ActiveProvider).Accuracy && lapsed < ReportIntervals.Add(ReportIntervals)) { location.Dispose(); return; } } ActiveProvider = location.Provider; } Interlocked.Exchange(ref LatestLocation, location)?.Dispose(); var position = location.ToGeoPosition(); PositionChanged.RaiseOn(Zebble.Thread.Pool, position); }