如何在Xamarin.forms中即时获取GPS位置?

4

我正在使用Geolocator插件在xamarin.forms中通过Listview_ItemTapped获取GPS位置,以捕获纬度和经度。但是获取位置平均需要15秒以上的时间。是否有任何方法可以立即获取位置。

if (CrossGeolocator.Current.IsGeolocationEnabled == false)
 {
    await DisplayAlert("Notification", "Geolocation is Unavailable ", "Ok");
 }
 else
 {
    Application.Current.Properties["LATITUDE"] = null;
     Application.Current.Properties["LONGITUDE"] = null;

    var locator = CrossGeolocator.Current;
    //locator.DesiredAccuracy = 50;               
    var position = await locator.GetPositionAsync(timeoutMilliseconds: 50000);

    Application.Current.Properties["LATITUDE"] = position.Latitude;
    Application.Current.Properties["LONGITUDE"] = position.Longitude;

    await Navigation.PushAsync(new RetailerDetailsPage(), false);
 }

我尝试删除 locator.DesiredAccuracy = 50;,但有时它会立即起作用,有时不会。

1个回答

5
是的,你可以获得更快的响应,但这取决于你的要求。
长答案涉及理解每个设备操作系统和型号、所请求的准确度、GPS获取时间、当前物理环境(室内、户外、GPS卫星的物理遮挡等)等因素,这些都会影响获取完整GPS响应所需的时间。
虽然Xamarin.Plugin的Geolocator很棒,我经常使用它,但它不能访问所有各种平台特定的位置功能。
在iOS上,你可以使用CoreLocation的RequestLocation,苹果将其描述为对用户位置的“快速修复”。这将执行可用的最快GPS开机、获取和关机。它非常适合获取快速的一次性位置。
在Android上,你可以使用Google的Play FusedLocationProviderApi (FusedLocationApi) 并通过GetLastLocation获取用户位置。这将立即返回位置(有一小部分可能为空)。
使用Google位置服务,你可以基于用户的wifi连接(基于SSID),等等获取位置。
通过使用表单平台特定的Dependency Service,您可以快速获得位置,然后使用Xamarin.Plugin的Geolocator来获取更准确和/或更近期的位置。这正是我们在启动应用程序时在后台线程上执行的操作,因为用户看到的第一个视图是他们在自定义地图上的位置,当从后台线程获取“完整”的GPS位置(可能更准确)时,我们可以调整地图...

谢谢@SushilHangover,但在我的情况下,我需要快速准确地确定用户可能在户外环境的位置。我只需要准确的纬度和经度,以确认用户访问该位置。我不打算在地图上显示用户的位置。而且大多数用户将处于远程位置,这并不能保证良好的WiFi或互联网连接。那么,最好和最简单的实现方式是什么? - Ganesh Parikh
@GaneshParikh 在你的情况下,你需要依赖完整的GPS位置,这只会随着设备/型号对请求的响应速度而变快。所以你要么继续像现在这样做,要么在用户点击ListView之前在后台检查用户的GPS位置,这样当他们点击时,你已经有一个缓存的经纬度可用,并停止后台GPS更新。 - SushiHangover

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接