Windows Universal App 10中的地理位置

时间:2016-01-06 23:18:04

标签: c# windows geolocation

我试图像这样得到我的设备的地理位置:

        Geolocator geo = new Geolocator();
        double lat = 0, longt = 0;

        Task getPosition = Task.Run(async () =>
        {
            try
            {
                Geoposition pos = await geo.GetGeopositionAsync();
                lat = pos.Coordinate.Point.Position.Latitude;
                longt = pos.Coordinate.Point.Position.Longitude;
            }
            catch(Exception exp)
            {
                Debug.WriteLine(exp);
            }

        });
        getPosition.Wait();

但是,我得到以下例外:

  

您的应用无权访问位置数据。确保   您已在应用程序清单中定义了ID_CAP_LOCATION   在手机上,您已通过检查设置>打开了位置。   位置。

  • 使用Windows 10在我的笔记本电脑上进行测试
  • 位置已在我的笔记本电脑上激活
  • 我在清单
  • 中添加了位置功能

知道可能出现什么问题?谢谢!

1 个答案:

答案 0 :(得分:2)

您提到笔记本电脑,但错误消息是针对手机的。你是在手机的模拟器中运行它并让你在手机中打开它吗?如果不只是在设置 - >中打开它地点。如果没有,请将项目adamt发送给我,我将在此处复制并修复和发布更新,或者尝试复制到我的最终版本。

编辑 - 我看过这个项目 解: 您需要从Windows 10开始包含Geolocator.RequestAccessAsync()。这将提示用户允许位置请求。在您的具体示例中,请确保使用async标记button1_click:

  private async void Button_Click(object sender, RoutedEventArgs e)

来自https://msdn.microsoft.com/en-us/library/windows/apps/br225537.aspx

var accessStatus = await Geolocator.RequestAccessAsync();
switch (accessStatus)
{
    case GeolocationAccessStatus.Allowed:
        _rootPage.NotifyUser("Waiting for update...", NotifyType.StatusMessage);

        // If DesiredAccuracy or DesiredAccuracyInMeters are not set (or value is 0), DesiredAccuracy.Default is used.
        Geolocator geolocator = new Geolocator { DesiredAccuracyInMeters = _desireAccuracyInMetersValue };

        // Subscribe to StatusChanged event to get updates of location status changes
        _geolocator.StatusChanged += OnStatusChanged;

        // Carry out the operation
        Geoposition pos = await geolocator.GetGeopositionAsync();

        UpdateLocationData(pos);
        _rootPage.NotifyUser("Location updated.", NotifyType.StatusMessage);
        break;

    case GeolocationAccessStatus.Denied:
        _rootPage.NotifyUser("Access to location is denied.", NotifyType.ErrorMessage);
        LocationDisabledMessage.Visibility = Visibility.Visible;
        UpdateLocationData(null);
        break;

    case GeolocationAccessStatus.Unspecified:
        _rootPage.NotifyUser("Unspecified error.", NotifyType.ErrorMessage);
        UpdateLocationData(null);
        break;
}