【问题标题】:Retrieve Location Information only from GPS Sensor in Xamarin Android仅从 Xamarin Android 中的 GPS 传感器检索位置信息
【发布时间】:2020-05-22 06:19:05
【问题描述】:

无论如何我可以将我的 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" />

谁能告诉我实现上述请求不需要哪些所有权限/使用功能?

我尝试了不同的组合,但不确定哪个是正确的。

【问题讨论】:

    标签: android xamarin.android android-manifest android-gps xamarin.essentials


    【解决方案1】:

    如果您只想从 Xamarin Android 中的 GPS 传感器检索位置信息。 您应该使用 Android 原生 API 来实现它。如果您使用Xamarin.Essentials,它将通过 GPS Provider、Network Provider、Passive Provider 获取坐标。

    这里正在运行 GIF。

    添加此权限。

        <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();
        }
    }
    

    最后别忘了申请运行时权限。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-17
      • 1970-01-01
      • 2012-02-28
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多