我正在开发一个跟踪我的路线的应用程序。当用户启动应用程序时,我想确定是否启用了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,但没有任何反应。 为什么会这样?它应该进入初始化状态然后就绪。
答案 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();
}