C# 如何向用户请求在Windows应用商店应用程序中使用位置的权限?

C# 如何向用户请求在Windows应用商店应用程序中使用位置的权限?,c#,windows-runtime,microsoft-metro,windows-store-apps,winrt-xaml,C#,Windows Runtime,Microsoft Metro,Windows Store Apps,Winrt Xaml,我正在尝试在Windows应用商店应用程序中使用定位功能。我已经在XAML页面中添加了Bing地图控件 在代码隐藏中,我尝试使用以下代码获取当前位置: private async Task SetMyLocation() { var position = await this.GetCurrentPosition(); if (position != null) this.DataContext = position; this.myLocation = new Location(positi

我正在尝试在Windows应用商店应用程序中使用定位功能。我已经在XAML页面中添加了Bing地图控件

在代码隐藏中,我尝试使用以下代码获取当前位置:

private async Task SetMyLocation()
{
var position = await this.GetCurrentPosition();
if (position != null)
this.DataContext = position;

this.myLocation = new Location(position.Latitude, position.Longitude);
this.myMap.Center = this.myLocation;
}
而且

private async Task<Position> GetCurrentPosition()
{
  try
  {
    Geolocator geolocator = new Geolocator();
    geolocator.DesiredAccuracy = PositionAccuracy.High;
    geolocator.MovementThreshold = 0;
    Geoposition location = await geolocator.GetGeopositionAsync();

    var postion = new Position
    {
      Latitude = location.Coordinate.Latitude,
      Longitude = location.Coordinate.Longitude
    };

    return postion;
  }
  catch (Exception ex)
  {
    . . .
  }
我收到一条弹出消息,要求用户允许使用定位功能

所以,问题是:是否有人在一开始就提出同样的问题?我是说,应用程序什么时候启动

提前谢谢你的帮助


问候

您可以创建一个
MessageDialog
对象。比如:

MessageDialog dialog = new MessageDialog("Do you want to allow XXXX to use your location?");
dialog.Commands.Add(new UICommand("Yes"));
dialog.Commands.Add(new UICommand("No"));
var result = await dialog.ShowAsync();
if(result.Label == "Yes")
    App.UseLocation = true; // Where UseLocation is a static property in your app somewhere

希望这有助于和快乐的编码

无法通过编程方式调用您看到的弹出窗口。调用
GetGeopositionAsync
时,它会自动显示。若应用程序定义了网络摄像头功能,则可以看到相同的对话框。类似的对话框只有在调用photo capture方法时才会出现,您无法事先获得特定权限的“是”或“否”

您可以做的是,在导航到特定页面的(…)中调用
SetMyLocation()
方法,而不是在按钮单击事件中


此外,您还可以通过代码设置权限。这完全取决于用户。用户可以通过设置魅力->权限选项卡来允许/阻止权限。

Hi Nate。谢谢你的快速回复。我试图实现你发布的代码。但是,我不能使用任何UseLocation属性。我需要添加任何类似的名称空间吗?或者这是针对特定的框架?我使用的是4.5No,这只是您添加到App.Xaml.cs的自定义静态属性。它可以从应用程序中的任何位置访问。嗨,Xyroid。你说得对。我是Windows8开发的新手。过了一会儿,我发现它不能像你说的那样通过程序调用。谢谢你的提示
MessageDialog dialog = new MessageDialog("Do you want to allow XXXX to use your location?");
dialog.Commands.Add(new UICommand("Yes"));
dialog.Commands.Add(new UICommand("No"));
var result = await dialog.ShowAsync();
if(result.Label == "Yes")
    App.UseLocation = true; // Where UseLocation is a static property in your app somewhere