Как я могу получить GPS-местоположение моего устройства в формах Xamarin?

Я хочу получить долготу и широту моего устройства, когда поле ввода с именем entLocation сфокусировано. Я использую Xamarin.Essential Geolocation для определения местоположения GPS своего устройства. Я следовал документации и учебным пособиям, но все еще не могу определить местоположение GPS. Я добавил разрешение ниже, чтобы мой Android-манифест еще ничего. Я получаю предупреждение об ошибке "Ошибка 3", ошибка 3 является исключением, когда невозможно получить местоположение.

Ошибка " Java.Lang.NullPointerException: попытка вызвать виртуальный метод" void android.app.Activity.requestPermissions(java.lang.String[],int) "для ссылки на нулевой объект "



Мои вопросы:
1. В чем моя ошибка в моем коде?
2. Могу ли я отключить свое местоположение от GPS? Если да, как я могу этого достичь?

использование-разрешение android:name="android.permission.ACCESS_COARSE_LOCATION"
использует-разрешение android:name="android.permission.ACCESS_FINE_LOCATION"
использует-функцию android:name="android.hardware.location" android:required="false"
использует-функцию android:name="android.hardware.location.gps" android:required="false"
использует-функцию android:name="android.hardware.location.network" android:required="false"

private async void entLocation_FocusedAsync(object sender, FocusEventArgs e)
    {
        try
        {
            var request = new GeolocationRequest(GeolocationAccuracy.Medium);
            var location = await Geolocation.GetLocationAsync(request);

            if (location != null)
            {
                entLocation.Text = location.Longitude.ToString() + "," + location.Latitude.ToString();
            }
        }
        catch (FeatureNotSupportedException fnsEx)
        {
            await DisplayAlert("Error1", fnsEx.ToString(), "ok");
        }
        catch (PermissionException pEx)
        {
            await DisplayAlert("Error2", pEx.ToString(), "ok");
        }
        catch (Exception ex)
        {
            await DisplayAlert("Error3", ex.ToString(), "ok");
        }
    }

1 ответ

Решение

Я также работаю над своим первым проектом Xamarin, который требует разрешения на местоположение. Несколько вещей, которые вы должны попробовать, могут помочь вам определить местоположение GPS.

Мои предложения

1) Вам необходимо предоставить дополнительные разрешения в AndroidManifest файл. Это

<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

2) Начиная с Android 6.0 или выше, у вас должны быть разрешения во время выполнения. Чтобы добиться этого, вам нужно переопределить OnStart() метод в вашем MainActivity.cs, Я ссылался на Разрешение местоположения для Android выше 6.0 с Xamarin.Forms.Maps. Вот что я сделал

protected override void OnStart()
{
    base.OnStart();
    if(CheckSelfPermission(Manifest.Permission.AccessCoarseLocation) != (int)Permission.Granted)
    {
        RequestPermissions(new string[] { Manifest.Permission.AccessCoarseLocation, Manifest.Permission.AccessFineLocation }, 0);
    }

}

Важное замечание: Мое решение здесь - просто временно разрешить выдачу разрешений. Visual Studio будет показывать исключение при первом создании и запуске проекта. После того, как вы выбрали "разрешить" из "Разрешить доступ к местоположению?" запрос на устройстве, вы не получите исключение при повторном запуске проекта. Я еще не занимался этим вопросом.

Мои пределы

Как я уже сказал, проблема не полностью решена. Мой ответ - помочь вам временно решить проблему с разрешениями местоположения и двигаться дальше. И я не знаю, как получить местоположение в автономном режиме.

Другие вопросы по тегам