Получать информацию о местоположении только от датчика GPS в Xamarin Android - PullRequest
1 голос
/ 06 февраля 2020

Можно ли в любом случае настроить приложение android на получение информации о местоположении только с датчика GPS. Я использую пакет Xamarin.Essentials для получения информации о местоположении. И в своем манифесте я добавил следующие разрешения на основе документации:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<uses-feature android:name="android.hardware.location" android:required="false" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
<uses-feature android:name="android.hardware.location.network" android:required="false" />

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

<uses-sdk android:minSdkVersion="25" android:targetSdkVersion="28" />

Может кто-нибудь сообщить мне, какие все полномочия / функции использования не требуются для реализации вышеуказанного запроса?

Я пробовал разные комбинации этого, но не уверен, какая из них правильная.

1 Ответ

1 голос
/ 07 февраля 2020

Если вы хотите получить информацию о местоположении только с датчика GPS в Xamarin Android. Вы должны использовать Android нативный API для достижения этой цели. Если вы использовали Xamarin.Essentials, он получит координаты от провайдера GPS, провайдера сети, провайдера пассивного доступа.

Здесь работает GIF. enter image description here

Добавьте это разрешение.

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

И создайте экземпляр LocationManager следующим образом:

    LocationManager locationManager = (LocationManager)Android.App.Application.Context.GetSystemService(Context.LocationService);

И затем внедрите LocationListener и получить координаты по GPS:

   MyLocationListener locationListener = new MyLocationListener(this);
   locationManager.RequestLocationUpdates(LocationManager.GpsProvider, 5000, 10, locationListener);

Код MyLocationListener.

       public class MyLocationListener : Java.Lang.Object, ILocationListener
{

    private MainActivity mainActivity;

    public MyLocationListener(MainActivity mainActivity)
    {
        this.mainActivity = mainActivity;
    }


    public void OnLocationChanged(Location loc)
    {
        Toast.MakeText(
          mainActivity,
          "Location changed: Lat: " + loc.Latitude + " Lng: "
              + loc.Longitude, ToastLength.Short).Show();


    }

    public void OnProviderDisabled(string provider)
    {
      //  throw new NotImplementedException();
    }

    public void OnProviderEnabled(string provider)
    {
       // throw new NotImplementedException();
    }

    public void OnStatusChanged(string provider, [GeneratedEnum] Availability status, Bundle extras)
    {
      //  throw new NotImplementedException();
    }
}

В конце не забудьте запросить разрешение во время выполнения.

...