Geolocator in Xamarin Forms
Step 1:
Add the following plugin in your project :https://www.nuget.org/packages/Xam.Plugin.Geolocator/
you can find plugin Documentation at :
https://jamesmontemagno.github.io/GeolocatorPlugin/
Step 2 :
add the following xaml in your page :<StackLayout Spacing="10" Padding="10">
<Button x:Name="buttonGetGPS" Text="Get GPS"/>
<Label x:Name="labelGPS"/>
<Button x:Name="buttonTrack" Text="Track Movements"/>
<Label x:Name="labelGPSTrack"/>
<Label Text=""/>
</StackLayout>
Step 3 :
Use the following code in C# file :
namespace PluginDemo
{
public partial class GeolocatorPage : ContentPage
{
public GeolocatorPage()
{
InitializeComponent(); buttonGetGPS.Clicked += async (sender, args) =>
{
try
{
var locator = CrossGeolocator.Current; locator.DesiredAccuracy = 1000; labelGPS.Text = "Getting gps";
var position = await locator.GetPositionAsync(timeoutMilliseconds: 10000);
if (position == null) { labelGPS.Text = "null gps :("; return; }
labelGPS.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);
}
catch //(Exception ex) { // Xamarin.Insights.Report(ex); // await DisplayAlert("Uh oh", "Something went wrong, but don't worry we captured it in Xamarin Insights! Thanks.", "OK"); } };
buttonTrack.Clicked += async (object sender, EventArgs e) =>
{
try { if (CrossGeolocator.Current.IsListening) { await CrossGeolocator.Current.StopListeningAsync(); labelGPSTrack.Text = "Stopped tracking"; buttonTrack.Text = "Stop Tracking"; } else { if (await CrossGeolocator.Current.StartListeningAsync(30000, 0)) { labelGPSTrack.Text = "Started tracking"; buttonTrack.Text = "Track Movements"; } } }
catch //(Exception ex) { //Xamarin.Insights.Report(ex); // await DisplayAlert("Uh oh", "Something went wrong, but don't worry we captured it in Xamarin Insights! Thanks.", "OK"); } }; }
protected override void OnAppearing() { base.OnAppearing(); try { CrossGeolocator.Current.PositionChanged += CrossGeolocator_Current_PositionChanged; CrossGeolocator.Current.PositionError += CrossGeolocator_Current_PositionError; } catch { } }
void CrossGeolocator_Current_PositionError(object sender, Plugin.Geolocator.Abstractions.PositionErrorEventArgs e)
{
labelGPSTrack.Text = "Location error: " + e.Error.ToString();
}
void CrossGeolocator_Current_PositionChanged(object sender, Plugin.Geolocator.Abstractions.PositionEventArgs e)
{
var position = e.Position; 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);
}
protected override void OnDisappearing()
{
base.OnDisappearing();
try { CrossGeolocator.Current.PositionChanged -= CrossGeolocator_Current_PositionChanged; CrossGeolocator.Current.PositionError -= CrossGeolocator_Current_PositionError; } catch { }
}
}
}
Comments
Post a Comment