【发布时间】:2021-10-27 19:52:18
【问题描述】:
我有一个带有 xamarin Essentials 的应用程序。这每 5 秒获取一次信息,GPS 等待时间为 3 秒
Device.StartTimer(TimeSpan.FromMilliseconds(Timmer), () => { RunPoint(); return isRunningTimer; });
public async void RunPoint()
{ try
{
DateTime dateLanch = DateTime.Now;
var request = new GeolocationRequest(accuracy, TimeSpan.FromSeconds(TimeOutGps));
var location = await Geolocation.GetLocationAsync(request);
if (location != null)
{
point = new GPSPoint
{
Status = StatusGPS.OK,
Point = new Cerezasoft.Geo.Points.Point { Latitude = location.Latitude, Longitude = location.Longitude },
Stamp = location.Timestamp.LocalDateTime,
StampSystem = DateTime.Now,
StampLanch = dateLanch,
StampUniversal = location.Timestamp.UtcDateTime,
Speed = 0,
SpeedGPS = location.Speed.HasValue ? location.Speed.Value : 0,
Elevation = location.Altitude.HasValue ? location.Altitude.Value : 0
};
}
else
{
point.Status = StatusGPS.ErrorCalculo;
}
}
catch (FeatureNotSupportedException fnsEx)
{
point.Status = StatusGPSRallySystem.NoSensor;
point.MessageError = fnsEx.Message;
}
catch (PermissionException pEx)
{
point.Status = StatusGPS.NoAcces;
point.MessageError = pEx.Message;
}
catch (Exception ex)
{
point.Status = StatusGPS.ErrorSensor;
point.MessageError = ex.Message;
}
}
当应用程序与具有 gps 的另一个应用程序一起使用时。 gps 信息的捕获效果很好,但如果您执行数据的精度和质量,位置就会变得不稳定。
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-feature android:name="android.hardware.location" android:required="false" />
<uses-feature android:name="android.hardware.location.gps" android:required="true" />
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
}
我在分屏中与另一个应用程序进行了比较,它运行良好。当我的应用程序单独运行时,操作系统会以不同的方式返回位置。当我的应用程序自行运行时。操作系统返回的位置更不稳定。两个测试都是在相同的地方,相同的条件和相同的手机进行的。我不知道哪些服务和哪些附加元素正在激活其他应用程序以实现 GPS 的最佳运行
感谢合作
【问题讨论】:
-
“如果你执行数据的精度和质量,位置就会变得不稳定” - 我不明白那句话。哪些代码行导致位置不稳定?你所说的“不稳定”是什么意思——你是如何测试的?您是否在室外使用具有良好卫星信号(远离建筑物、树木)的实际设备?哪个设备?显示您获得的实际值序列 - 您认为“不稳定”可能是 gps 的“正常行为”。手机的天线长度有限,必须平衡精度和电池消耗。它们不是精密 GPS 设备。
-
就个人而言,我经常进行快速 gps 测量,并对它们应用我自己的过滤器。谷歌搜索,请参阅 this SO thread 和 here is one good discussion。
-
当您对 Geolocation 进行异步调用时,需要一些时间来轮询传感器以获取基于您设置的参数的值。鉴于您为系统提供的值相对较短,我很惊讶它似乎“不稳定”。如果你真的需要这么快的值,你可能会更好地实现这是一种特定于平台的方式,并订阅每个平台上的位置更新。然后,您可以自己缓冲它们并将不那么不稳定的内容传递回 Xamarin Forms。
-
我在分屏中与另一个应用程序进行了比较,它运行良好。当我的应用程序单独运行时,操作系统会以不同的方式返回位置。当我的应用程序自行运行时。操作系统返回的位置更不稳定。两个测试都是在相同的地方,相同的条件和相同的手机进行的。我不知道哪些服务和哪些附加元素正在激活其他应用程序以实现 GPS 的最佳功能
-
“我不知道哪些服务和其他元素正在激活其他应用程序以实现 gps 的最佳功能” 我认为其他应用程序已经完成了一些自定义“过滤” ",他们自己的代码,以获得更稳定的结果。 AFAIK,没有任何人可以告诉你的“简单”答案。因此我上面的链接。
标签: xamarin.forms xamarin.essentials