我正在使用Geolocator类在UWP app中查找设备的当前位置。位置检索过程在我的计算中运行得非常快。但是当我尝试在真实设备中运行相同的应用程序时,设备检索过程大约需要30秒。 我使用以下代码段:
var accessStatus = await Geolocator.RequestAccessAsync();
if (accessStatus == GeolocationAccessStatus.Allowed)
{
Geolocator geolocator = new Geolocator
{
DesiredAccuracyInMeters = 500,
DesiredAccuracy = PositionAccuracy.High
};
Geoposition pos = await geolocator.GetGeopositionAsync()
}
如何在我的设备中更快地完成此过程?
已经尝试过将DesiredAccuracyInMeters值提高到2000,但无法找到任何改进。提前谢谢。
答案 0 :(得分:0)
如果您查看documentation,则可以看到当您同时设置DesiredAccuracy
和DesiredAccuracyInMeters
时,最后一组优先:
如果未设置DesiredAccuracyInMeters或DesiredAccuracy,您的应用程序将使用500米的精度设置(对应于默认的DesiredAccuracy设置)。将DesiredAccuracy设置为Default或High会将DesiredAccuracyInMeters分别设置为500或10米。当您的应用设置DesiredAccuracy和DesiredAccuracyInMeters时,您的应用将使用最后设置的精确度值。
所以,因为您将DesiredAccuracy
设置为High
,所以您实际上会覆盖米设置。为了加快搜索速度,请不要设置High
精度并仅设置米值。
答案 1 :(得分:0)
我将添加到Martin的问题中,您应首先使用缓存位置,然后使用GetPositionAsync
,您应该以这种方式更快地本地化用户:
var locator = CrossGeolocator.Current;
locator.DesiredAccuracy = 500;
//Check if we have a cached position
var loc = await locator.GetLastKnownLocationAsync ();
if ( loc != null )
{
CurrentPosition = new Position (loc.Latitude, loc.Longitude);
}
if ( !locator.IsGeolocationAvailable || !locator.IsGeolocationEnabled )
{
return;
}
//and if not we get a new one
var def = await locator.GetPositionAsync (TimeSpan.FromSeconds (10), null, true);
CurrentPosition = new Position (def.Latitude, def.Longitude);