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); }
public void OnLocationChanged( Location location ) { if(location.Provider != activeProvider) { if(activeProvider != null && manager.IsProviderEnabled( activeProvider )) { LocationProvider pr = manager.GetProvider( location.Provider ); TimeSpan lapsed = GetTimeSpan( location.Time ) - GetTimeSpan( lastLocation.Time ); if(pr.Accuracy > manager.GetProvider( activeProvider ).Accuracy && lapsed < timePeriod.Add( timePeriod )) { location.Dispose(); return; } } activeProvider = location.Provider; } var previous = Interlocked.Exchange( ref lastLocation, location ); if(previous != null) { previous.Dispose(); } var p = new Position(); if(location.HasAccuracy) { p.Accuracy = location.Accuracy; } if(location.HasAltitude) { p.Altitude = location.Altitude; } if(location.HasBearing) { p.Heading = location.Bearing; } if(location.HasSpeed) { p.Speed = location.Speed; } p.Longitude = location.Longitude; p.Latitude = location.Latitude; p.Timestamp = Geolocator.GetTimestamp( location ); var changed = PositionChanged; if(changed != null) { changed( this, new PositionEventArgs( p ) ); } }
/// <summary> /// Called when the location has changed. /// </summary> /// <param name="location">The new location, as a Location object.</param> /// <since version="Added in API level 1" /> /// <remarks> /// <para tool="javadoc-to-mdoc"> /// Called when the location has changed. /// </para> /// <para tool="javadoc-to-mdoc"> There are no restrictions on the use of the supplied Location object.</para> /// <para tool="javadoc-to-mdoc"> /// <format type="text/html"> /// <a /// href="http://developer.android.com/reference/android/location/LocationListener.html#onLocationChanged(android.location.Location)" /// target="_blank"> /// [Android Documentation] /// </a> /// </format> /// </para> /// </remarks> public void OnLocationChanged(Android.Locations.Location location) { if (location.Provider != _activeProvider) { if (_activeProvider != null && _manager.IsProviderEnabled(_activeProvider)) { var provider = _manager.GetProvider(location.Provider); var lapsed = GetTimeSpan(location.Time) - GetTimeSpan(_lastLocation.Time); if (provider.Accuracy > _manager.GetProvider(_activeProvider).Accuracy&& lapsed < _timePeriod.Add(_timePeriod)) { location.Dispose(); return; } } _activeProvider = location.Provider; } var previous = Interlocked.Exchange(ref _lastLocation, location); if (previous != null) { previous.Dispose(); } var position = new Position(); if (location.HasAccuracy) { position.Accuracy = location.Accuracy; } if (location.HasAltitude) { position.Altitude = location.Altitude; } if (location.HasBearing) { position.Heading = location.Bearing; } if (location.HasSpeed) { position.Speed = location.Speed; } position.Longitude = location.Longitude; position.Latitude = location.Latitude; position.Timestamp = LocationService.GetTimestamp(location); PositionChanged?.Invoke(this, new PositionEventArgs(position)); }