meteres
(as in meteors :joy:) based on this: https://github.com/jamesmontemagno/Xamarin.Plugins/blob/master/Geolocator/Geolocator/Geolocator.Plugin.Abstractions/IGeolocator.cs#L23
private async void OnGeoLocationStartTrackingClicked(object sender, EventArgs e)
{
var status = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Location);
if (status != PermissionStatus.Granted)
{
if (await CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.Location))
{
await DisplayAlert("Need location", "TruckerApp need that location", "OK");
}
var results = await CrossPermissions.Current.RequestPermissionsAsync(new[] {Permission.Location});
status = results[Permission.Location];
}
if (status == PermissionStatus.Granted)
{
if (CrossGeolocator.Current.IsListening)
return;
if (!CrossGeolocator.Current.IsGeolocationAvailable)
{
await DisplayAlert("GPS Start", "GPS ist auf Ihrem Gerät nicht verfügbar.", "Ok");
return;
}
if (!CrossGeolocator.Current.IsGeolocationEnabled)
{
await
DisplayAlert("GPS Start",
"GPS ist auf Ihrem Gerät nicht aktiviert. Prüfen Sie die Einstellungen am Phone.", "Ok");
return;
}
if (!CrossGeolocator.Current.SupportsHeading)
{
//await DisplayAlert("GPS Start", "GPS Heading ist auf Ihrem Gerät nicht verfügbar.", "Ok");
//return;
}
GeoLocationInfoButton.Text = "Stop GPS";
GeoLocationInfoButton.Clicked -= OnGeoLocationStartTrackingClicked;
GeoLocationInfoButton.Clicked += OnGeoLocationStopTrackingClicked;
GeoLocationPanel.IsVisible = true;
CrossGeolocator.Current.DesiredAccuracy = 1;
GeoLocationStatusLabel.Text = "Getting gps";
CrossGeolocator.Current.PositionChanged += (o, args) =>
{
var position = args.Position;
var geoLocalTime = GetGeoLocalUtcTime(position);
var speedInKmPerHour = GetSpeedInKilometerPerHour(position);
GeoLocationStatusLabel.Text =
$"Time: {geoLocalTime}\n" +
$"Lat: {position.Latitude}\n" +
$"Long: {position.Longitude}\n" +
$"Altitude: {position.Altitude} m\n" +
$"Altitude Accuracy: {position.AltitudeAccuracy} m\n" +
$"Accuracy: {position.Accuracy} m\n" +
$"Heading: {position.Heading} ° (Grad abweichend von Nord) \n" +
$"Speed: {speedInKmPerHour} km/h";
};
CrossGeolocator.Current.PositionError += async (o, args) =>
{
var error = args?.Error;
await DisplayAlert("GPS Fehler", $"Fehler : {error}", "Ok");
};
//minTime in msec, minDistance in meter see https://blog.xamarin.com/geolocation-for-ios-android-and-windows-made-easy/
bool result =
await CrossGeolocator.Current.StartListeningAsync(minTime: 1, minDistance: 1, includeHeading: true);
if (!result)
{
await DisplayAlert("GPS Start", "GPS Tracking konnte nicht gestarted werden", "Ok");
return;
}
}
else
{
await DisplayAlert("GeoLocation Info", $"Geo Location nicht verfügbar. Status:{status}", "OK");
if (Device.OS == TargetPlatform.iOS)
{
//On iOS you may want to send your user to the settings screen.
CrossP
private async void OnGetGeoLocationTrackingClicked(object sender, EventArgs e)
{
var locator = CrossGeolocator.Current;
locator.DesiredAccuracy = 1;
GeoLocationStatusLabel.Text = "Getting gps";
Plugin.Geolocator.Abstractions.Position position = null;
try
{
position = await locator.GetPositionAsync(timeoutMilliseconds: 10000);
}
catch (Exception ex)
{
await DisplayAlert("GPS GetPositionAsync Fehler", ex.Message, "Ok");
position = null;
}
if (position == null)
{
GeoLocationStatusLabel.Text = "Null gps :(";
return;
}
GeoLocationStatusLabel.Text =
$"Time: {position.Timestamp}\n" +
$"Lat: {position.Latitude}\n" +
$"Long: {position.Longitude}\n" +
$"Altitude: {position.Altitude}\n" +
$"Altitude Accuracy: {position.AltitudeAccuracy}\n" +
$"Accuracy: {position.Accuracy}\n" +
$"Heading: {position.Heading}\n" +
$"Speed: {position.Speed}";
}
}