GeoCoordinateWatcher.TryStart doesn't work properly in C#

旧街凉风 提交于 2020-06-29 04:18:07

问题


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);
    }
}

回答1:


I've looked microsoft documents and there's something that catches my attention.

The distance that must be moved, in meters, relative to the coordinate from the last PositionChanged event, before the location provider raises another PositionChanged event.

Remarks

The default movement threshold is zero, which means that any change in location detected by the current location provider causes a PositionChanged event and an update in the Position property.

   // Get location
   CLocation myLocation = new CLocation();
   myLocation.GetLocationEvent();

You must be register PostionChange event to get location information

Use the location class (CLocation) where do you need.

GeoLocation Information MSDN

    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);
    }
}


来源:https://stackoverflow.com/questions/52909404/geocoordinatewatcher-trystart-doesnt-work-properly-in-c-sharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!