【问题标题】:Xamarin forms Geolocation wrong resultsXamarin 形成地理定位错误的结果
【发布时间】:2020-12-03 12:01:06
【问题描述】:

我正在开发 Xamarin 表单应用程序并尝试使用 Xamarin.Essentials Geolocation 来确定我的 Android 设备位置。我按照https://docs.microsoft.com/en-us/xamarin/essentials/geolocation?tabs=android 的步骤操作,但结果完全不准确,因为我目前在中欧,但结果经纬度为 37.4219983333333 和 -122.084,我猜这是谷歌总部的位置。

这是我的 AndroidManifest.xml 的样子

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.workingwithmaps">
  <uses-sdk android:minSdkVersion="21" />
  <application android:label="WorkingWithMaps.Android">
    <meta-data android:name="com.google.android.geo.API_KEY" android:value="MY_API_KEY" />
    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
    <!-- Necessary for apps that target Android 9.0 or higher -->
    <uses-library android:name="org.apache.http.legacy" android:required="false" />
  </application>
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_COARSE_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" />
</manifest>

我的 MainActivity.cs 类:

 [Activity(Label = "Resti", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
  public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
  {
    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Android.Content.PM.Permission[] grantResults)
    {
      Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

      base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    }

    protected override void OnCreate(Bundle savedInstanceState)
    {
      TabLayoutResource = Resource.Layout.Tabbar;
      ToolbarResource = Resource.Layout.Toolbar;

      base.OnCreate(savedInstanceState);

      Xamarin.Essentials.Platform.Init(this, savedInstanceState);
      global::Xamarin.Forms.Forms.SetFlags("CollectionView_Experimental");
      Xamarin.Essentials.Platform.Init(this, savedInstanceState);
      global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
      Xamarin.FormsMaps.Init(this, savedInstanceState);
      LoadApplication(new App());
    }
  }

比我从 ContentPage 中这样称呼它:

 protected async override void OnAppearing()
 {
      Xamarin.Essentials.Location location = null;

      var request = new GeolocationRequest(GeolocationAccuracy.Medium, TimeSpan.FromSeconds(10));
      cts = new CancellationTokenSource();
      location = await Geolocation.GetLocationAsync(request, cts.Token);
      base.OnAppearing();
 }

知道我做错了什么吗?

【问题讨论】:

  • 您是在测试这是 Android 模拟器还是在实际的硬件设备上测试?
  • Android 模拟器与 Android 6.0 - API 23 -> Visual Studio 模拟器中的构建
  • 模拟器没有实际的 GPS 功能,它默认使用模拟位置。
  • 很高兴知道谢谢 :)

标签: c# android xamarin.forms geolocation xamarin.essentials


【解决方案1】:

我在模拟器上测试了这个功能,感谢 Jason,我发现模拟器没有真正的 GPS 功能,它默认使用模拟位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2017-05-26
    • 2014-09-20
    相关资源
    最近更新 更多