是否可以检查位置服务是否有效?

时间:2011-02-03 13:31:15

标签: windows-phone-7

是否可以检查位置服务是否有效?

我是指设置>位置>位置服务

可能没有直接的API用于调用,但它可以与GeoCoordinateWatcher一起使用吗?

5 个答案:

答案 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)

根据TeJ's answer制作此内容。

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已启用,用户可以对其进行设置。