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

Popular posts from this blog

ScrollView in xamarin forms

Checkbox and RadioButon in xamarin forms

Navigation in Xamarin.Forms