我正在捕捉Latitude& Listview_ItemTapped
使用Geolocator
插件获取xamarin.forms中GPS定位的经度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);
}
。
但平均需要超过15秒来捕获位置。有没有办法立即获得位置。
locator.DesiredAccuracy = 50;
我尝试删除{{1}},但有时它会立即发挥作用&有时不是。
答案 0 :(得分:5)
是的,您可以获得更快的回复,但取决于您的要求。
长答案涉及了解每个设备OS&模型,要求的准确度,GPS采集时间,您当前的物理环境(室内,室外,GPS卫星的物理阴影......)等都会影响获得完整GPS响应所需的时间。
虽然Xamarin.Plugin Geolocator
很棒并且我一直使用它,但它无法访问所有各种平台特定的位置功能。</ p>
在 iOS 上,您可以使用CoreLocation上的RequestLocation
,Apple称为&#34;快速修复&#34;在用户的位置。这将执行最快的GPS上电,获取和断电。获得快速的一次性位置非常棒。
在 Android 上,您可以使用Google的Play FusedLocationProviderApi(FusedLocationApi
)并通过GetLastLocation
获取用户位置。这将立即返回该位置(很可能它为null)。
使用Google位置服务,您可以根据用户的wifi连接(基于SSID)等获取位置...
所以通过使用表格&#39;特定于平台的Dependency Service,您可以获取快速位置,然后使用Xamarin.Plugin Geolocator
来获取更准确和/或更新的位置。
这正是我们在启动启动时在app中的后台线程上所做的事情,因为用户看到的第一个视图是他们在自定义地图上的位置,而不是a&#34; full&#34; GPS位置是从后台线程获得的(可能更准确的位置)我们可以调整地图......