Windows Phone:PositionChanged没有触发Windows 8

时间:2014-07-18 21:25:48

标签: windows-phone-8 location windows-phone-8.1

我遇到了Windows手机的问题,我正在寻找一个geolocator位置更改事件,我实例化并设置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正确地被触发一次,最后一个位置被输入到TOOLS函数中的位置......但是我添加到位置工具的任何后续GEOPOIN都不会触发positionchanged方法....我不认为它是模拟器本身,好像我在模拟器上启动地图并正确使用位置工具它会在每次更新时更改用户位置。但是在我的代码中,我对positionchanged方法进行了调试,它只在应用程序启动时第一次被调用,而且只有在它获得地理定位的时间后才会调用它,这就是她的全部内容写道..永远不会触发位置工具中的任何操作。

我的代码中没有任何内容会破坏地理定位器对象...但是没有其他输入可以触发它...我感到茫然......对于我缺少或不理解的任何帮助都将不胜感激。此时我想知道工具包中的UserLocationMarker是否以某种方式破坏或删除了位置更改事件监听器注册等。

3 个答案:

答案 0 :(得分:0)

请参阅此参考以正确回复职位更改事件: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();
        });
    }
}

答案 1 :(得分:0)

首先检查How to test apps that use location data for Windows Phone 8,了解如何测试使用位置服务的应用。

对于您的信息,此问题已得到答案here。希望它有所帮助。

答案 2 :(得分:0)

此代码适合我,效果很好,类似于HERE地图应用:

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

与最后一个位置离开的人数相差多少,2秒后应用程序将再次抓住您当前的位置 尝试在真实设备上测试应用