使用 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。因此我上面的链接。"
这不可能是真的,因为那根本不会影响我们的应用程序。他们只是设法请求一个更好的位置,这反过来又以某种方式帮助了我们的应用程序 - 我们只是想找出原因。
我有一个包含 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。因此我上面的链接。"
这不可能是真的,因为那根本不会影响我们的应用程序。他们只是设法请求一个更好的位置,这反过来又以某种方式帮助了我们的应用程序 - 我们只是想找出原因。