问题描述
我对以下代码有问题,即它没有显示权限提示,因此我无法授予应用程序访问我的位置的权限,并且不起作用.
I'm having an issue with the following code, namely that it doesn't show a Permission Prompt, therefore I can't give the application access to my location and doesn't work.
public Tuple<double, double> GetDeviceLocation()
{
GeoCoordinateWatcher watcher = new GeoCoordinateWatcher();
watcher.TryStart(false, TimeSpan.FromMilliseconds(1000));
GeoCoordinate coord = watcher.Position.Location;
if (coord.IsUnknown != true)
{
return Tuple.Create(coord.Latitude, coord.Longitude);
}
}
推荐答案
我看过Microsoft文档,并且有一些吸引我的注意力.
I've looked microsoft documents and there's something that catches my attention.
备注
默认运动阈值为零,这意味着任何当前位置提供商检测到的位置变化会导致PositionChanged事件和Position属性的更新.
The default movement threshold is zero, which means that anychange in location detected by the current location provider causes aPositionChanged event and an update in the Position property.
// Get location
CLocation myLocation = new CLocation();
myLocation.GetLocationEvent();
您必须注册 PostionChange 事件以获取位置信息
You must be register PostionChange event to get location information
在需要的地方使用位置信息类(CLocation).
Use the location class (CLocation) where do you need.
public class CLocation
{
GeoCoordinateWatcher watcher;
public void GetLocationEvent()
{
this.watcher = new GeoCoordinateWatcher();
this.watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);
bool started = this.watcher.TryStart(false, TimeSpan.FromMilliseconds(2000));
if (!started)
{
Console.WriteLine("GeoCoordinateWatcher timed out on start.");
}
}
void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
PrintPosition(e.Position.Location.Latitude, e.Position.Location.Longitude);
}
void PrintPosition(double Latitude, double Longitude)
{
Console.WriteLine("Latitude: {0}, Longitude {1}", Latitude, Longitude);
}
}
这篇关于GeoCoordinateWatcher.TryStart在C#中无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!