Я посмотрел через MSDN и здесь, и я попробовал кучу разных способов сделать это, и ни один из них не работает. Я пытаюсь запустить слушатель плагина геолокации Джеймса Монтемано для Xamarin. Даже используя его точный код, я полностью застрял.
Я думаю, что должно быть что-то, чего я просто упускаю из await.async и, возможно, просто из-за ОО-программирования на C # в целом. Я новичок в Xamarin и C #, поэтому я немного борюсь. У меня есть класс с именем LocationControls.cs, который выглядит так
using EIOBoardMobile.Model;
namespace EIOBoardMobile.CustomControls
{
public static class LocationControls
{
public static async Task StartListening()
{
if (CrossGeolocator.Current.IsListening)
return;
await CrossGeolocator.Current.StartListeningAsync(TimeSpan.FromMinutes(5), 10, true);
CrossGeolocator.Current.PositionChanged += PositionChanged;
CrossGeolocator.Current.PositionError += PositionError;
}
private static void PositionChanged(object sender, PositionEventArgs e)
{
GPSLocationCurrent.SetLatLong();
}
private static void PositionError(object sender, PositionErrorEventArgs e)
{
Debug.WriteLine(e.Error);
//Handle event here for errors
}
private static async Task StopListening()
{
if (!CrossGeolocator.Current.IsListening)
return;
await CrossGeolocator.Current.StopListeningAsync();
CrossGeolocator.Current.PositionChanged -= PositionChanged;
CrossGeolocator.Current.PositionError -= PositionError;
}
}
}
Я хочу запустить слушатель сразу, когда откроется приложение. поэтому мой App.xaml.cs выглядит следующим образом.
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new NavigationPage(new MainPage());
if (Settings.LocationTracking == true)
{
await LocationControls.StartListening();
//this is where I'm getting the error
}
}
Ошибка говорит о том, что я могу использовать await только с асинхронным методом. Но затем, если я пытаюсь не использовать await, он говорит, что я не могу использовать метод без ключевого слова await.
Я пробовал это также без статических ключевых слов, но затем он говорит, что ему нужна ссылка на объект. Но потом, когда я пытаюсь создать ссылку на объект, он говорит, что ничего не возвращает. Каждый раз, когда я пробую это, я получаю ошибку. Я просто хочу иметь возможность немедленно запустить слушателя. Я понимаю, что оператор return после if в StartListening () не позволяет мне дать методу StartListening () тип возвращаемого значения, но я все равно не хочу возвращаемый тип. Мне нужен способ не запускать StartListeningAsync, если он уже прослушивается, поэтому мне нужно это возвращение.
Я так запутался в асинхронных методах. Возможно, если бы я только понял, как сделать ссылку на объект для нестатических методов, которые могли бы помочь. Но я пытался использовать переменные, и это не работает.