Windows phone 7 是否可以检查定位服务是否处于活动状态?

Windows phone 7 是否可以检查定位服务是否处于活动状态?,windows-phone-7,Windows Phone 7,是否可以检查定位服务是否处于活动状态 我的意思是设置>定位>定位服务 可能没有用于调用的直接API,但它可以与GeoCoordinateWatcher一起使用吗?您可以使用以下代码来确定位置服务的状态: var watcher = new GeoCoordinateWatcher(); if (GeoPositionStatus.Disabled == watcher.Status) { // Watcher is disabled. } 更现实地说,您需要更多地关注状态的更改(仅仅因为

是否可以检查定位服务是否处于活动状态

我的意思是设置>定位>定位服务


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

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

var watcher = new GeoCoordinateWatcher();
if (GeoPositionStatus.Disabled == watcher.Status)
{
    // Watcher is disabled.
}
更现实地说,您需要更多地关注状态的更改(仅仅因为服务未被禁用并不意味着您拥有位置数据),因此您应该查看使用位置服务的方法


还有一个很好的帖子,非常适合设备前测试,不过为了节省您在这方面的时间,Widnows电话团队已经发布了。

即使启动了
GeoCoordinateWatcher
,如果传感器被禁用,您也会得到
NoData
。您应该尝试改用幽会艺术:

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

如果返回
False
,则表示传感器已禁用。如果它返回
True
,则它被启用。设置适当的超时时间(在上面的代码段中,我使用30秒),并将此进程委托给辅助线程,这样它就不会挂起UI。

您可以将StatusChanged事件添加到GeoCoordinateWatcher并测试GeoPositionPermission。当它触发时,权限中会被拒绝

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
     }
 }
watcher=new geocordinatewatcher();
watcher.StatusChanged+=新事件处理程序(watcher\u StatusChanged);
watcher.Start();
void watcher_status已更改(对象发送器、地理位置StatusChangedEventArgs e)
{
if(watcher.Permission==geoppositionpermission.Denied)
{
//定位服务被禁用
}
}
希望对您有所帮助。

基于

            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);
            }
而我的应用程序的
切换开关。IsEnabled
绑定到系统中允许的

当我切换到位置服务时,禁用它并返回应用程序,我的
切换开关
被禁用(还有一个字符串“请,在可见的系统设置中启用位置服务”)。当我切换到位置服务时,启用它并返回到我的应用程序,我的
ToggleSwitch
被启用,用户可以进行设置。

您可能需要首先在watcher上实际调用
Start()
,并观察状态的变化(这就是为什么我为您提供了进一步阅读的链接)。如果您在emulator上运行,几乎肯定会一直处于
NoData
状态,这是使用Windows Phone GPS emulator的另一个很好的理由,它包装了位置服务。有趣的事实:在我的应用程序中,使用禁用位置的TryStart导致应用程序崩溃,所以是的…我一直不知道,Chris R的回答提供了正确的状态。
public override void OnNavigatedTo()
    {            
        using (var watcher = new GeoCoordinateWatcher())
        {
            try
            {
                watcher.Start();
            }
            finally
            {
                IsAllowedInSystem = watcher.Permission.Equals(GeoPositionPermission.Granted);
                watcher.Stop();
            }
        }
    }