2011-02-03 91 views

回答

3

您可以使用下面的代码来确定位置服务的状态:

var watcher = new GeoCoordinateWatcher(); 
if (GeoPositionStatus.Disabled == watcher.Status) 
{ 
    // Watcher is disabled. 
}

更为现实的,你要多注意改变的状态(只是因为服务不禁用并不意味着你有位置数据),所以你应该看看MSDN Documentation与位置服务工作。

还有一个很好的帖子filtering and emulating location data using the Reactive extensions,这是完美的预装置测试,但为了节省你的时间在Widnows Phone团队发布了Windows Phone GPS Emulator

+0

此代码不起作用。始终显示“无数据”! – user598328 2011-02-03 14:01:58

+0

您可能首先需要在观察者上实际调用`Start()`并观察状态变化(这就是为什么我给了您链接以供进一步阅读的原因)。如果您正在模拟器上运行,您几乎肯定会一直获得`NoData`状态,这是使用包装位置服务的Windows Phone GPS模拟器的另一个重要原因。 – 2011-02-03 14:23:52

3

即使已启动GeoCoordinateWatcher,如果传感器被禁用,您将获得NoData。你应该尝试使用的却是TryStart:

GeoCoordinateWatcher g = new GeoCoordinateWatcher(); 
MessageBox.Show(g.TryStart(false,TimeSpan.FromSeconds(30)).ToString()); 

如果返回False,这意味着该传感器被禁用。如果它返回True,则它被启用。设置一个合适的超时时间(在上面的代码片段中,我使用了30秒)并将此进程委派给辅助线程,以便它不会挂起UI。

+0

有趣的事实:在我的应用程序使用TryStart与位置禁用导致应用程序崩溃,所以是... – Esa 2012-10-15 11:33:42

2

您可以将StatusChanged事件添加到GeoCoordinateWatcher,并在触发时在权限中测试GeoPositionPermission.Denied。

watcher = new GeoCoordinateWatcher(); 
watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged); 
watcher.Start(); 

void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e) 
{ 

    if (watcher.Permission == GeoPositionPermission.Denied) 
    { 
     // Location services were disabled 
    } 
} 

希望有所帮助。

4
  GeoCoordinateWatcher g = new GeoCoordinateWatcher(); 
      g.Start(); 
      if (g.Permission.Equals(GeoPositionPermission.Granted)) 
      { 
       //Your location services is enabled. Go ahead. 
       //Your codes goes here. 
      } 
      else if (g.Permission.Equals(GeoPositionPermission.Denied) || g.Permission.Equals(GeoPositionPermission.Unknown)) 
      {      
       MessageBox.Show("Location services are disabled. To enable them, Goto Settings - Location - Enable Location Services.", "Location services", MessageBoxButton.OK); 
      } 
0

取得这个基于TeJ'sanswer

public override void OnNavigatedTo() 
    {    
     using (var watcher = new GeoCoordinateWatcher()) 
     { 
      try 
      { 
       watcher.Start(); 
      } 
      finally 
      { 
       IsAllowedInSystem = watcher.Permission.Equals(GeoPositionPermission.Granted); 
       watcher.Stop(); 
      } 
     } 
    } 

而且我的应用ToggleSwitch.IsEnabled被绑定到IsAllowedInSystem。 当我切换到位置服务,禁用它并返回到应用程序,我的ToggleSwitch被禁用(也是一个字符串“请启用位置服务在系统设置”在可见)。当我切换到位置服务,启用它并返回到我的应用程序,我的ToggleSwitch已启用,用户可以进行设置。