CrossGeolocator GetPositionAsync 退出循环/方法
Posted
技术标签:
【中文标题】CrossGeolocator GetPositionAsync 退出循环/方法【英文标题】:CrossGeolocator GetPositionAsync exits loop/method 【发布时间】: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));
【问题讨论】:
你的问题不清楚请清楚 【参考方案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
【讨论】:
以上是关于CrossGeolocator GetPositionAsync 退出循环/方法的主要内容,如果未能解决你的问题,请参考以下文章