gpt4 book ai didi

c# - IGeolocator 的 PositionChanged 触发两次?

转载 作者:太空宇宙 更新时间:2023-11-03 14:57:22 26 4
gpt4 key购买 nike

上下文

我正在使用 C# (Xamarin Forms) 开发交通管理应用,它需要持续提供用户位置。

插件

我正在使用 James Montemagno 的 Geolocator 插件,当位置发生变化时,IGeolocator 界面上的 PositionChanged 事件似乎触发了两次。

设备

我目前正在 Visual Studio Enterprise v15.5.3 上的 Android 模拟器上进行调试

重现该行为的步骤

1) 实例化定位器对象后:

IGeolocator 定位器 = CrossGeolocator.Current

2) 定位器的 PositionChanged 被触发时的一些代码:

locator.PositionChanged += (sender,e) => {
// Testing its frequency
System.Diagnostics.Debug.WriteLine("Position Changed Triggered.");
}

3) 在异步 Task 函数中开始监听

locator.DesiredAccuracy = 100;
if(!locator.isListening)
await locator.StartListeningAsync(TimeSpan.FromMilliseconds(500), 1, true);

4) 通过模拟器发送坐标

预期结果

输出窗口应该显示一条消息“Position Changed Triggered”。

实际结果

输出窗口打印了两条相同的消息,说:“Position Changed Triggered”。

为什么会这样?以及我怎样才能做到每次实际更改位置时仅触发/处理一次事件。

到目前为止我尝试了什么

  • 用 Google 搜索了这个问题,没有找到很多相同的情况。
  • 看到一个解释 here这让我相信这是模拟器与它有关,尽管我发现解决方案有点模棱两可并且不确定他们指的是“实时/引脚模式”
  • 创建了一个单独的函数并将事件分配给它,然后在调用我的代码后将其删除。这确实导致它执行一次,但它永远不会再次执行,除非我重新分配。如果我这样做,代码肯定会第二次运行,导致相同的初始问题。<
  • 尝试设置一个 bool 值来检查它是否已经运行过一次,但不久之后就意识到这是多么不合逻辑。
  • 尝试设置 DateTime 对象以确保在给定时间范围内不超过 1 个事件发生;这也不好。

帮助将不胜感激。谢谢。

最佳答案

请注意,位置服务可能会多次传送位置事件(更多 here )。

即使位置服务未多次传送位置事件,API(地理定位器插件)的使用和/或实现也可能导致从 API 接收位置事件不止一次。

在应用程序中,您可以检查位置事件属性(准确性、位置时间戳、接收事件的顺序等)。使用“最佳”位置事件,其中“最佳”表示首选准确度、最近的时间戳,或者如果时间戳和准确度相等,则使用第一个接收到的位置事件。

关于c# - IGeolocator 的 PositionChanged 触发两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48337903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com