是否可以检查位置服务是否处于活动状态?
您可以使用下面的代码来确定位置服务的状态:
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。
即使已启动GeoCoordinateWatcher
,如果传感器被禁用,您将获得NoData
。你应该尝试使用的却是TryStart:
GeoCoordinateWatcher g = new GeoCoordinateWatcher();
MessageBox.Show(g.TryStart(false,TimeSpan.FromSeconds(30)).ToString());
如果返回False
,这意味着该传感器被禁用。如果它返回True
,则它被启用。设置一个合适的超时时间(在上面的代码片段中,我使用了30秒)并将此进程委派给辅助线程,以便它不会挂起UI。
有趣的事实:在我的应用程序使用TryStart与位置禁用导致应用程序崩溃,所以是... – Esa 2012-10-15 11:33:42
您可以将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
}
}
希望有所帮助。
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);
}
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
已启用,用户可以进行设置。
此代码不起作用。始终显示“无数据”! – user598328 2011-02-03 14:01:58
您可能首先需要在观察者上实际调用`Start()`并观察状态变化(这就是为什么我给了您链接以供进一步阅读的原因)。如果您正在模拟器上运行,您几乎肯定会一直获得`NoData`状态,这是使用包装位置服务的Windows Phone GPS模拟器的另一个重要原因。 – 2011-02-03 14:23:52