我正在使用地理定位器类在 UWP 应用程序中查找设备的当前位置。位置检索过程在我的计算中运行得非常快。但是当我尝试在真实设备中运行相同的应用程序时,设备检索过程大约需要 30 秒。我正在使用以下代码片段:
var accessStatus = await Geolocator.RequestAccessAsync();
if (accessStatus == GeolocationAccessStatus.Allowed)
{
Geolocator geolocator = new Geolocator
{
DesiredAccuracyInMeters = 500,
DesiredAccuracy = PositionAccuracy.High
};
Geoposition pos = await geolocator.GetGeopositionAsync()
}
如何在我的设备中加快此过程?
已经尝试通过将 DesiredAccuracy InMeter 值增加到 2000 来尝试,但找不到任何改进。提前谢谢。
如果您查看文档,您可以看到当您同时设置 DesiredAccuracy
和 DesiredAccuracyInMeters
时,最后设置的优先:
当"所需精度(以米为单位("和"所需精度">均未设置时,你的应用将使用 500 米的精度设置(对应于"默认"的"所需精度"设置(。将"所需精度"设置为"默认值"或"高"间接将"所需精度(以米为单位("分别设置为 500 米或 10 米。当你的应用同时设置"所需准确度"和"所需准确度(以米为单位("时,你的应用将使用最后设置的准确度值。
因此,您因为将DesiredAccuracy
设置为High
,所以您实际上覆盖了仪表设置。若要加快搜索速度,请不要设置High
精度,而仅设置米值。
我会补充马丁的问题,你应该先使用缓存的位置,然后使用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);