Windows Phone 8 Geolocator 无法设置desiredAccuracy = High 并且绑定到 PositionChanged 事件

Posted

技术标签:

【中文标题】Windows Phone 8 Geolocator 无法设置desiredAccuracy = High 并且绑定到 PositionChanged 事件【英文标题】:Windows Phone 8 Geolocator can't set desiredAccuracy = High AND tie into PositionChanged event 【发布时间】:2013-10-04 02:58:05 【问题描述】:

背景:我精通 WPF/XAML,但对 Windows Phone 8 不熟悉。

希望我只是缺少一些愚蠢的东西......

我希望 DesiredAccuracy 高,但我也想挂钩 PositionChanged 事件。

当下面的代码到达 _GeoLocator.DesiredAccuracy = PositionAccuracy.High;它会中止。如果关闭,一切正常,但我真的想要高精度。

这两者似乎是相互排斥的。

错误消息是:操作中止(来自 HRESULT 的异常:0x80004004 (E_ABORT))。我已启用定位功能。

违规代码示例:

    public MainPage()
    
        InitializeComponent();

        _GeoLocator.MovementThreshold = 1;

        _GeoLocator.PositionChanged += (Geolocator sender, PositionChangedEventArgs args) =>
        
            //UpdateLocation(args);
            Console.WriteLine("Position Changed");
        ;

        //THIS WILL THROW...WHY??   IF I COMMENT OFF POSITIONCHANGED ABOVE, IT WORKS FINE.
        _GeoLocator.DesiredAccuracy = PositionAccuracy.High;
    

【问题讨论】:

【参考方案1】:

您必须在“PositionChanged”事件处理程序(Similar question)之前设置“DesiredAccuracy”。

_GeoLocator.MovementThreshold = 1;
_GeoLocator.DesiredAccuracy = PositionAccuracy.High;
_GeoLocator.PositionChanged += (Geolocator sender, PositionChangedEventArgs args) =>
    
        //UpdateLocation(args);
        Console.WriteLine("Position Changed");
    ;

【讨论】:

谢谢...这是赢家。从发布的(类似问题)链接:“在获取位置时,不允许更改任何通知参数(MovementThreshold、DesiredAccuracy 或 ReportInterval)。这包括位置更改(PositionChanged 事件)以及获取位置异步( GetPositionAsync)。如果要更改通知参数,您必须取消订阅所有事件和/或等到 GetPositionAsync 完成后再进行更改。"

以上是关于Windows Phone 8 Geolocator 无法设置desiredAccuracy = High 并且绑定到 PositionChanged 事件的主要内容,如果未能解决你的问题,请参考以下文章

Windows Phone 8 与 windows 8 开发技术概览

Windows Phone 8 与 windows 8 开发技术概览

xml 适用于Windows 8.1和Windows Phone 8.1应用程序的扩展器控件演示。

Windows Phone:PositionChanged 未触发 Windows 8

xml 适用于Windows 8.1和Windows Phone 8.1应用程序的扩展器控件的模板。

在 windows phone 8 和 windows 8 中使用 Google Play 游戏服务