位置始终返回“未知”

时间:2011-05-23 14:37:44

标签: windows-phone-7 geolocation

我刚在真实设备上尝试过我的第一个WP7应用程序。我的问题是我使用地理位置作为其中一个功能,但我总是得到位置未知。 我不知道是否有任何方法可以向我的应用授予位置权限,或者我是否遗漏了某些内容。 在手机设置中,位置服务已启用,地图应用程序在查找我的实际位置时没有任何问题。 我检查了GeoCoordinateWatcher.Permisson属性,其值为“Granted”。 我已在WMAppManifest.xml中使用此行<Capability Name="ID_CAP_LOCATION"/>

要解决它的任何想法吗?

[编辑]

这是我的代码。在你告诉我这样做之后我添加了起跑线,但我仍然遇到问题。

 string location = "41,0";
 GeoCoordinateWatcher watcher = new GeoCoordinateWatcher();
 watcher.Start();
 var myPosition = watcher.Position;

 if (!myPosition.Location.IsUnknown) {
 location = myPosition.Location.Latitude + "," +  myPosition.Location.Longitude;

}

1 个答案:

答案 0 :(得分:2)

等待位置服务准备就绪。您的GeoCoordinateWatcher有一个状态更改事件,另一个用于更改位置。您的代码应如下所示。

//this goes somewhere in your startup sequence
_geoCoordinateWatcher.StatusChanged += 
  new EventHandler<GeoPositionStatusChangedEventArgs>(_gcw_StatusChanged);
_geoCoordinateWatcher.PositionChanged += 
  new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(_gcw_PositionChanged);
_geoCoordinateWatcher.MovementThreshold = 50; //metres
_geoCoordinateWatcher.Start();

...

static void _gcw_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e)
{
  if (e.Status == GeoPositionStatus.Ready)
    PhoneApplicationService.Current.State["CurrentLocation"] = 
      _geoCoordinateWatcher.Position.Location;
}

static void _gcw_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
  PhoneApplicationService.Current.State["CurrentLocation"] = e.Position.Location;
}

由于您似乎有些悲伤,我建议您首先在状态更改事件中添加一个消息框,以便您可以判断它是否会在您的手机上触发,并且一旦您获得排序尝试更改位置等。

另外,你试过去外面吗?您可能无法获得GPS锁定,并且手机信号塔位置并不总是有效。走出去,清除高楼大厦。如果你住在高楼,可以去阳台或(最重要的是)在屋顶上。