【问题标题】:CrossGeolocator GetPositionAsync exits loop/methodCrossGeolocator GetPositionAsync 退出循环/方法
【发布时间】:2019-01-12 19:19:51
【问题描述】:

我想经常在应用程序中保留手机的位置,所以我使用 GetPositionAsync 方法,并继续调用它。我已经编写了一些代码,当我将其附加到一个简单的 OnAppearing 方法中时,一切正常。如果我在方法或 while 循环中编写它,当它到达 GetPositionAsync 或其他一些本地数据库的东西时,我认为只有可等待的方法,它会直接跳出循环/方法。我正在使用异步。有什么想法吗?

var locator = CrossGeolocator.Current;
locator.DesiredAccuracy = 20;

var position = await locator.GetPositionAsync(TimeSpan.FromSeconds(10));

location.Latitude = position.Latitude;
location.Longitude = position.Longitude;

await App.LocationDatabase.SaveLocationAsync(location);
await Task.Delay(TimeSpan.FromSeconds(10));

【问题讨论】:

  • 你的问题不清楚请清楚

标签: c# xamarin.forms geolocation


【解决方案1】:

您没有共享任何循环代码,因此很难重现您的问题。

无论如何,您不应该在循环中调用GetPositionAsync,而是使用StartListeningAsync 方法并连接到PositionChange 事件。

async Task StartListeningAsync()
{
    if(CrossGeolocator.Current.IsListening)
        return;

    await CrossGeolocator.Current.StartListeningAsync(TimeSpan.FromSeconds(5), 10, true);

    CrossGeolocator.Current.PositionChanged += PositionChanged;
    CrossGeolocator.Current.PositionError += PositionError;
}

private void PositionChanged(object sender, PositionEventArgs e)
{
    //If updating the UI, ensure you invoke on main thread
    var position = e.Position;
    var output = "Full: Lat: " + position.Latitude + " Long: " + position.Longitude;
    output += "\n" + $"Time: {position.Timestamp}";
    output += "\n" + $"Heading: {position.Heading}";
    output += "\n" + $"Speed: {position.Speed}";
    output += "\n" + $"Accuracy: {position.Accuracy}";
    output += "\n" + $"Altitude: {position.Altitude}";
    output += "\n" + $"Altitude Accuracy: {position.AltitudeAccuracy}";
    Debug.WriteLine(output);
} 

private void PositionError(object sender, PositionErrorEventArgs e)
{
    Debug.WriteLine(e.Error);
    //Handle event here for errors
} 

async Task StopListeningAsync()
{
    if(!CrossGeolocator.Current.IsListening)
        return;

    await CrossGeolocator.Current.StopListeningAsync();

    CrossGeolocator.Current.PositionChanged -= PositionChanged;
    CrossGeolocator.Current.PositionError -= PositionError;
}

https://jamesmontemagno.github.io/GeolocatorPlugin/LocationChanges.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多