是否可以检查位置服务是否有效?
我是指设置>位置>位置服务
可能没有直接的API用于调用,但它可以与GeoCoordinateWatcher一起使用吗?
答案 0 :(得分: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);
}
答案 1 :(得分:3)
您可以使用以下代码确定位置服务的状态:
var watcher = new GeoCoordinateWatcher();
if (GeoPositionStatus.Disabled == watcher.Status)
{
// Watcher is disabled.
}
更现实地说,你需要更加注意改变状态(仅因为服务没有被禁用并不意味着你有位置数据),所以你应该看看{{ 3}}用于使用位置服务。
在MSDN Documentation上还有一个很好的帖子,这对于预设备测试来说是完美的,但是为了节省您在Widnows电话团队已经发布filtering and emulating location data using the Reactive extensions这方面的时间。
答案 2 :(得分:3)
即使启动GeoCoordinateWatcher
,如果传感器被禁用,您也会获得NoData
。您应该尝试使用的是TryStart:
GeoCoordinateWatcher g = new GeoCoordinateWatcher();
MessageBox.Show(g.TryStart(false,TimeSpan.FromSeconds(30)).ToString());
如果返回False
,则表示传感器已禁用。如果它返回True
,则启用它。设置一个适当的超时时间(在上面的代码片段中我使用30秒)并将此进程委托给辅助线程,因此它不会挂起UI。
答案 3 :(得分:2)
您可以向GeoCoordinateWatcher添加StatusChanged事件,并在触发时测试权限中的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 :(得分:0)
public override void OnNavigatedTo()
{
using (var watcher = new GeoCoordinateWatcher())
{
try
{
watcher.Start();
}
finally
{
IsAllowedInSystem = watcher.Permission.Equals(GeoPositionPermission.Granted);
watcher.Stop();
}
}
}
我的应用程序&#39; ToggleSwitch.IsEnabled
绑定到IsAllowedInSystem
。
当我切换到位置服务,禁用它并返回应用时,我的ToggleSwitch
被禁用(也是字符串&#34;请启用位置服务在系统设置&#34; 中可见)。当我切换到位置服务时,启用它并返回我的应用程序,我的ToggleSwitch
已启用,用户可以对其进行设置。