Search code examples
androidvisual-studiogeolocationmaui

.NET MAUI GeolocationRequest - What settings to provide?


I am using the following code to get the Lat/Long and display.

        labelLatLong.Text = "Checking Lat Long. Please wait...";
        var request = new GeolocationRequest(GeolocationAccuracy.Medium, TimeSpan.FromSeconds(15));
        CancellationTokenSource cts = new CancellationTokenSource();
        try
        {
            var location = Geolocation.GetLocationAsync(request, cts.Token);
            if (location != null)
            {
                labelLatLong.Text = $"Latitude: {location.Result.Latitude}, Longitude: {location.Result.Longitude}, Altitude: {location.Result.Altitude}";
            }
        }
        catch {
            labelLatLong.Text = "Unable to get location.";
        }

For some reason, I am not getting the location value and there is no exception thrown and I cannot debug beyond the line 'GetLocationAsync', and the application says "App not responding"

I am using Visual Studio 17.4.3, Pixel 5 (API 33) android emulator.

I already gave permissions 'All the time' in the android emulator.

My laptop also has the location enabled.

Are there any other settings, I should be looking at?

Any suggestions? Appreciate your help. Thank you!


Solution

  • In your xaml.cs:

    private async void Button_Clicked(object sender, EventArgs e)
    {
            try
            {
                var location = await Geolocation.GetLastKnownLocationAsync();
                if (location == null)
                {
                    location = await Geolocation.GetLocationAsync(new GeolocationRequest()
                    {
                        DesiredAccuracy = GeolocationAccuracy.High, Timeout = TimeSpan.FromSeconds(30)
                    });
                }
                if (location == null)
                {
                    labelLatLong.Text = "Unable to get location.";
                }
                else
                {
                    labelLatLong.Text = $"Latitude: {location.Latitude}, Longitude: {location.Longitude}, Altitude: {location.Altitude}";
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
    }