- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 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”。
为什么会这样?以及我怎样才能做到每次实际更改位置时仅触发/处理一次事件。
帮助将不胜感激。谢谢。
最佳答案
请注意,位置服务可能会多次传送位置事件(更多 here )。
即使位置服务未多次传送位置事件,API(地理定位器插件)的使用和/或实现也可能导致从 API 接收位置事件不止一次。
在应用程序中,您可以检查位置事件属性(准确性、位置时间戳、接收事件的顺序等)。使用“最佳”位置事件,其中“最佳”表示首选准确度、最近的时间戳,或者如果时间戳和准确度相等,则使用第一个接收到的位置事件。
关于c# - IGeolocator 的 PositionChanged 触发两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48337903/
上下文 我正在使用 C# (Xamarin Forms) 开发交通管理应用,它需要持续提供用户位置。 插件 我正在使用 James Montemagno 的 Geolocator 插件,当位置发生变化
我是一名优秀的程序员,十分优秀!