Windows Phone:PositionChanged 未触发 Windows 8

Posted

技术标签:

【中文标题】Windows Phone:PositionChanged 未触发 Windows 8【英文标题】:Windows Phone: PositionChanged not firing Windows 8 【发布时间】:2014-07-18 21:25:48 【问题描述】:

我在使用 windows phone 时遇到问题,我正在查看地理定位器位置更改事件,我实例化并设置 GEOLOCATOR,如下所示:

 geolocator = new Geolocator();
 geolocator.DesiredAccuracy = PositionAccuracy.High;
 geolocator.MovementThreshold = 100; // The units are meters.
 geolocator.PositionChanged += geolocator_PositionChanged;

我的 positionchanged 事件如下:

void geolocator_PositionChanged(Geolocator sender, PositionChangedEventArgs args)
    
        Dispatcher.BeginInvoke(() =>
        
            marker = (UserLocationMarker)this.FindName("UserLocationMarker");
            if (marker != null)
            
                marker.GeoCoordinate = args.Position.Coordinate.ToGeoCoordinate();

            

        );
    

当我在模拟器中启动它时,PositionChanged 正确地被启动了 1 次,最后一个位置被输入到 TOOLS 函数中的位置中......但是我添加到定位工具中的任何后续 GEOPOINTS 都不会启动 positionchanged 方法....我不认为它是模拟器本身,就好像我在模拟器上启动地图并使用定位工具一样,它会在每次更新时正确更改用户位置。但是在我的代码中,我对 positionchanged 方法进行了调试,并且仅在应用程序启动时第一次调用它,仅此而已……一旦获得了地理位置,这就是她所写的一切……永远不会触发任何动作在定位工具中。

我的代码中没有任何内容会破坏地理定位器对象...但没有其他输入会触发它...我不知所措..任何对我遗漏或不理解的内容的帮助将不胜感激。在这一点上,我想知道工具包中的 UserLocationMarker 是否以某种方式破坏或删除了位置更改事件侦听器注册或其他东西。

【问题讨论】:

【参考方案1】:

请参阅此参考以正确响应位置更改事件:MSDN PositionChanged

确保在 UI 线程上声明 Geolocator。我在我的 Windows Phone 8 上测试了以下代码。我在办公室里走来走去,观察按钮的内容根据我在建筑物中的位置而变化。

可能是您的 MovementThreshold 太高或模拟器出现问题。

public partial class MainPage : PhoneApplicationPage
    
    Geolocator geo = null;
    public MainPage()
    
        InitializeComponent();
        geo = new Geolocator();
        try
        
            geo.MovementThreshold = 1.0;
            geo.DesiredAccuracy = PositionAccuracy.High;
            geo.ReportInterval = 2000;
            geo.PositionChanged += geo_PositionChanged;
        
        catch (Exception ex)
        
            string error = ex.Message;
        
    

    private void geo_PositionChanged(Geolocator sender, PositionChangedEventArgs e)
    
        // my_button is just a normal button on the main xaml page
        Deployment.Current.Dispatcher.BeginInvoke(() =>
        
            this.my_button.Content = e.Position.Coordinate.Latitude.ToString() + "\n" + e.Position.Coordinate.Longitude.ToString();
        );
    

【讨论】:

【参考方案2】:

首先查看How to test apps that use location data for Windows Phone 8,了解如何测试使用定位服务的应用的更多知识。

为了您的信息,这个问题已经得到了答案here。希望对您有所帮助。

【讨论】:

【参考方案3】:

这段代码对我来说很好用,很好用,类似于 HERE 地图应用:

geolocator = new Geolocator();
geolocator.DesiredAccuracy = PositionAccuracy.High;
geolocator.ReportInterval = 2000;
geolocator.PositionChanged += geolocator_PositionChanged;

无论您距离上次捕获的位置还有多少米,2 秒后,应用程序都会再次捕获您当前的位置 尝试在真机上测试应用

【讨论】:

以上是关于Windows Phone:PositionChanged 未触发 Windows 8的主要内容,如果未能解决你的问题,请参考以下文章

Windows Phone 应用程序仅适用于 Windows Phone 7?

windows phone 8 和 10 的 windows phone 应用程序开发

是否可以将 Windows Phone App 项目转换为 Windows Phone 类库?

Windows Phone 8.0 DLL 是不是与 Windows Phone 8.1 应用程序兼容?

VS2010 Express for Windows Phone 有中文吗?那里有下载?官方的Windows Phone Developer Tools 是英文版

Windows-Phone-7:检查 soundEffectInstance 的实例是不是正在播放