Я хочу, чтобы он мог обновляться каждые несколько футов, но я не вижу каких-либо событий, к которым я могу подключиться.
Если вы хотите обновить местоположение, когда расстояние или времякак сказал Джейсон, вы можете использовать Xam.Plugin.Geolocator для установки пакетов nuget.
Вы можете реализовать этот метод для контроля времени и расстояния:
Task<bool> StartListeningAsync(TimeSpan minimumTime, double minimumDistance, bool includeHeading = false, ListenerSettings listenerSettings = null);
И подпишитесь на это событие, чтобы получить текущую позицию:
CrossGeolocator.Current.PositionChanged += CrossGeolocator_Current_PositionChanged;
Вы можете увидеть весь образец по первой ссылке Джейсона, я предоставляю необходимый код:
bool tracking;
public ObservableCollection<Position> Positions { get; } = new ObservableCollection<Position>();
public HomePage()
{
InitializeComponent();
ListViewPositions.ItemsSource = Positions;
}
private async void ButtonTrack_Clicked(object sender, EventArgs e)
{
try
{
var hasPermission = await Utils.CheckPermissions(Permission.Location);
if (!hasPermission)
return;
if (tracking)
{
CrossGeolocator.Current.PositionChanged -= CrossGeolocator_Current_PositionChanged;
CrossGeolocator.Current.PositionError -= CrossGeolocator_Current_PositionError;
}
else
{
CrossGeolocator.Current.PositionChanged += CrossGeolocator_Current_PositionChanged;
CrossGeolocator.Current.PositionError += CrossGeolocator_Current_PositionError;
}
if (CrossGeolocator.Current.IsListening)
{
await CrossGeolocator.Current.StopListeningAsync();
labelGPSTrack.Text = "Stopped tracking";
ButtonTrack.Text = "Start Tracking";
tracking = false;
count = 0;
}
else
{
Positions.Clear();
if (await CrossGeolocator.Current.StartListeningAsync(TimeSpan.FromSeconds(TrackTimeout.Value), TrackDistance.Value,
TrackIncludeHeading.IsToggled, new ListenerSettings
{
ActivityType = (ActivityType)ActivityTypePicker.SelectedIndex,
AllowBackgroundUpdates = AllowBackgroundUpdates.IsToggled,
DeferLocationUpdates = DeferUpdates.IsToggled,
DeferralDistanceMeters = DeferalDistance.Value,
DeferralTime = TimeSpan.FromSeconds(DeferalTIme.Value),
ListenForSignificantChanges = ListenForSig.IsToggled,
PauseLocationUpdatesAutomatically = PauseLocation.IsToggled
}))
{
labelGPSTrack.Text = "Started tracking";
ButtonTrack.Text = "Stop Tracking";
tracking = true;
}
}
}
catch (Exception ex)
{
await DisplayAlert("Uh oh", "Something went wrong, but don't worry we captured for analysis! Thanks.", "OK");
}
}
void CrossGeolocator_Current_PositionError(object sender, PositionErrorEventArgs e)
{
labelGPSTrack.Text = "Location error: " + e.Error.ToString();
}
void CrossGeolocator_Current_PositionChanged(object sender, PositionEventArgs e)
{
Device.BeginInvokeOnMainThread(() =>
{
var position = e.Position;
Positions.Add(position);
count++;
LabelCount.Text = $"{count} updates";
labelGPSTrack.Text = string.Format("Time: {0} \nLat: {1} \nLong: {2} \nAltitude: {3} \nAltitude Accuracy: {4} \nAccuracy: {5} \nHeading: {6} \nSpeed: {7}",
position.Timestamp, position.Latitude, position.Longitude,
position.Altitude, position.AltitudeAccuracy, position.Accuracy, position.Heading, position.Speed);
});
}
https://github.com/jamesmontemagno/GeolocatorPlugin/blob/master/samples/GeolocatorSample/GeolocatorSample/HomePage.xaml.cs