diff --git a/src/NmeaParser/NmeaParser.csproj b/src/NmeaParser/NmeaParser.csproj index a38c929..7e160d1 100644 --- a/src/NmeaParser/NmeaParser.csproj +++ b/src/NmeaParser/NmeaParser.csproj @@ -2,7 +2,7 @@ - netstandard2.0;netstandard1.4;netcoreapp2.1;net452;monoandroid50;monoandroid70;xamarinios10;uap10.0.18362;net6.0;net6.0-ios;net6.0-android;net6.0-windows10.0.19041.0 + netstandard2.0;netstandard1.4;netcoreapp2.1;net452;monoandroid50;monoandroid70;xamarinios10;uap10.0.18362;net6.0;net7.0-ios;net7.0-android;net6.0-windows10.0.19041.0 true true Debug;Release diff --git a/src/NmeaParser/SystemNmeaDevice.Android.cs b/src/NmeaParser/SystemNmeaDevice.Android.cs index ea119dc..111e56f 100644 --- a/src/NmeaParser/SystemNmeaDevice.Android.cs +++ b/src/NmeaParser/SystemNmeaDevice.Android.cs @@ -68,10 +68,17 @@ namespace NmeaParser stream = new StringStream(); listener = new Listener(); listener.NmeaMessage += (s, e) => stream?.Append(e); -#if MONOANDROID50 - bool success = manager.AddNmeaListener(listener); +#if NETCOREAPP + if (OperatingSystem.IsAndroidVersionAtLeast(24)) + manager.AddNmeaListener((IOnNmeaMessageListener)listener, null); + else + manager.AddNmeaListener((GpsStatus.INmeaListener)listener); #else - bool success = manager.AddNmeaListener(listener, null); +#if !API_LEVEL_24 + manager.AddNmeaListener(listener); +#else + manager.AddNmeaListener(listener, null); +#endif #endif manager.RequestLocationUpdates(LocationManager.GpsProvider, 0, 0f, listener ); return Task.FromResult(stream); @@ -83,7 +90,14 @@ namespace NmeaParser if (listener is not null) { manager.RemoveUpdates(listener); +#if NETCOREAPP + if (OperatingSystem.IsAndroidVersionAtLeast(24)) + manager.RemoveNmeaListener((IOnNmeaMessageListener)listener); + else + manager.RemoveNmeaListener((GpsStatus.INmeaListener)listener); +#else manager.RemoveNmeaListener(listener); +#endif listener.Dispose(); listener = null; } @@ -92,21 +106,25 @@ namespace NmeaParser } private class Listener : Java.Lang.Object, -#if API_LEVEL_24 +#if API_LEVEL_24 || NETCOREAPP IOnNmeaMessageListener, -#else +#endif +#if !API_LEVEL_24 || NETCOREAPP GpsStatus.INmeaListener, #endif ILocationListener { private bool _isNmeaSupported = false; -#if API_LEVEL_24 - void IOnNmeaMessageListener.OnNmeaMessage(string? message, long timestamp) -#else - void GpsStatus.INmeaListener.OnNmeaReceived(long timestamp, string? message) +#if API_LEVEL_24 || NETCOREAPP + void IOnNmeaMessageListener.OnNmeaMessage(string? message, long timestamp) => OnMessage(timestamp, message); #endif +#if !API_LEVEL_24 || NETCOREAPP + void GpsStatus.INmeaListener.OnNmeaReceived(long timestamp, string? message) => OnMessage(timestamp, message); +#endif + private void OnMessage(long timestamp, string? message) { + _isNmeaSupported = true; if (message != null) NmeaMessage?.Invoke(this, message);