/// <inheritdoc/> public Task <bool> StopListeningAsync() { if (_Listener == null) { return(Task.FromResult(true)); } var providers = Providers; _Listener.PositionChanged -= OnListenerPositionChanged; _Listener.PositionError -= OnListenerPositionError; for (var i = 0; i < providers.Length; ++i) { Manager.RemoveUpdates(_Listener); } _Listener = null; return(Task.FromResult(true)); }
/// <inheritdoc/> public async Task <bool> StartListeningAsync(TimeSpan minTime, double minDistance, bool includeHeading = false, ListenerSettings settings = null) { var hasPermission = await CheckPermissions(); if (!hasPermission) { return(false); } var minTimeMilliseconds = minTime.TotalMilliseconds; if (minTimeMilliseconds < 0) { throw new ArgumentOutOfRangeException(nameof(minTime)); } if (minDistance < 0) { throw new ArgumentOutOfRangeException(nameof(minDistance)); } if (IsListening) { throw new InvalidOperationException("This Geolocator is already listening"); } var providers = Providers; _Listener = new GeolocationContinuousListener(Manager, minTime, providers); _Listener.PositionChanged += OnListenerPositionChanged; _Listener.PositionError += OnListenerPositionError; var looper = Looper.MyLooper() ?? Looper.MainLooper; foreach (var provider in providers) { Manager.RequestLocationUpdates(provider, (long)minTimeMilliseconds, (float)minDistance, _Listener, looper); } return(true); }