WP8中的GeoCoordinateWatcher StatusChanged事件

时间:2014-04-05 01:43:49

标签: c# windows-phone-8 gps

我正在开发一个跟踪我的路线的应用程序。当用户启动应用程序时,我想确定是否启用了GPS。所以我写了这个:

protected override void OnNavigatedTo(NavigationEventArgs e)
        {            
            base.OnNavigatedTo(e);
            Transporter._watcher.StatusChanged += _watcher_StatusChanged;
        }  
void _watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e)
        {          
            button1.IsEnabled = false; //appbar buttons
            button2.IsEnabled = false;

        switch (e.Status)
        {

            case GeoPositionStatus.Initializing:
                button1.IsEnabled = false;
                button2.IsEnabled = false;
                menuitem1.Text = "searching gps signal...";                    
                break;

            case GeoPositionStatus.NoData:
                button1.IsEnabled = false;
                button2.IsEnabled = false;
                menuitem1.Text = "no location info";                    
                break;

            case GeoPositionStatus.Ready:
                button1.IsEnabled = true;                    
                menuitem1.Text = "gps ok";                    
                break;
        }
    }       

我的问题是,当用户在启动应用程序之前忘记打开GPS时,他们必须最小化应用程序,打开GPS,然后返回应用程序。我试了一下,OnNavigatedTo事件触发,所以作为StatusChanged,但没有任何反应。 为什么会这样?它应该进入初始化状态然后就绪。

1 个答案:

答案 0 :(得分:2)

如果您想检查GPS运行情况,可以使用Geolocator.LocationStatus property。它的values会告诉您它是否正在初始化,关闭等等。

所以这可能会有所帮助:

protected override void OnNavigatedTo(NavigationEventArgs e)
    {            
        base.OnNavigatedTo(e);
        if (yourGeolocator.LocationStatus == PositionStatus.Disabled)
        {
            // do your stuff for disabled GPS
        }
        else  NotDisabled();
    }