使用 xamarin essentials 每 5 秒更新位置时出现问题

problem updating location every 5 seconds with xamarin essentials

我有一个包含 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);
    }

我在分屏模式下与另一个应用程序进行了比较,它运行良好。当我的应用程序单独运行时,操作系统 returns 以不同的方式定位。当我的应用程序自行运行时。操作系统 returns 位置 more erratically.both 测试是在相同的位置、相同的条件和相同的单元格 phone 进行的。我不知道哪些服务和哪些附加元素正在激活其他应用程序以实现 gps 的最佳功能

感谢合作

“我在分屏中与另一个应用程序进行了比较,它工作正常。当我的应用程序单独运行时,操作系统 returns 以不同的方式显示位置。当我的应用程序自己运行。操作系统 returns 位置更不稳定。"

我 运行 遇到了与上述完全相同的问题

这是我的代码

locator = CrossGeolocator.Current;
if (locator.IsGeolocationAvailable && locator.IsGeolocationEnabled)
{
    locator.DesiredAccuracy = 10;
    await locator.StartListeningAsync(TimeSpan.FromSeconds(15), 10, false, new Plugin.Geolocator.Abstractions.ListenerSettings()
    {
        AllowBackgroundUpdates = true,
        ActivityType = Plugin.Geolocator.Abstractions.ActivityType.Fitness,
        PauseLocationUpdatesAutomatically = false
    });
    locator.PositionChanged += Postion_Changed;
}

public void Postion_Changed(object sender, Plugin.Geolocator.Abstractions.PositionEventArgs e)
{
    if (e.Position.Accuracy < 75)
    {
       LocationService.SaveGpsLocation(e.Position.Latitude, e.Position.Longitude, e.Position.Timestamp.DateTime);
    }
}

当 运行 它与另一个 GPS 应用程序一起使用时,它的定位非常准确,但是当 运行 单独使用时,它会跳动很多。

"我认为其他应用已经完成了一些自定义“过滤”,他们自己的代码,以获得更稳定的结果。没有任何人可以告诉你的“简单”答案,AFAIK。因此我上面的链接。"

这不可能是真的,因为那根本不会影响我们的应用程序。他们只是设法请求一个更好的位置,这反过来又以某种方式帮助了我们的应用程序 - 我们只是想找出原因。