From 42234515cb640af4e3e67ca869a73c00658169d7 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Sun, 6 Aug 2023 09:40:37 +0200 Subject: [PATCH] Android14: crash due to missing announcement of ForegroundServiceType. Fixes #1655. --- src/main/AndroidManifest.xml | 1 + .../opentracks/services/TrackRecordingService.java | 8 +++++++- .../services/handlers/AltitudeCorrectionManager.java | 4 ++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index ee0833309..8f07d32d8 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -41,6 +41,7 @@ limitations under the License. android:required="false" /> + diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java index 7ae099bee..fd841a463 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java @@ -18,6 +18,8 @@ package de.dennisguse.opentracks.services; import android.app.Service; import android.content.Intent; +import android.content.pm.ServiceInfo; +import android.os.Build; import android.os.Handler; import android.os.Looper; import android.os.PowerManager.WakeLock; @@ -205,7 +207,11 @@ public class TrackRecordingService extends Service implements TrackPointCreator. private void startSensors() { wakeLock = SystemUtils.acquireWakeLock(this, wakeLock); trackPointCreator.start(this, handler); - startForeground(TrackRecordingServiceNotificationManager.NOTIFICATION_ID, notificationManager.setGPSonlyStarted(this)); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + startForeground(TrackRecordingServiceNotificationManager.NOTIFICATION_ID, notificationManager.setGPSonlyStarted(this), ServiceInfo.FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE); + } else { + startForeground(TrackRecordingServiceNotificationManager.NOTIFICATION_ID, notificationManager.setGPSonlyStarted(this)); + } } public void endCurrentTrack() { diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/AltitudeCorrectionManager.java b/src/main/java/de/dennisguse/opentracks/services/handlers/AltitudeCorrectionManager.java index b8c42e31e..eecec56a6 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/AltitudeCorrectionManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/AltitudeCorrectionManager.java @@ -25,11 +25,11 @@ public class AltitudeCorrectionManager { public AltitudeCorrectionManager() { this.altitudeConverterFallback = new EGM2008Internal(); - this.altitudeConverter = Build.VERSION.SDK_INT >= 34 ? new AltitudeConverter() : null; + this.altitudeConverter = Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE ? new AltitudeConverter() : null; } public void correctAltitude(Context context, TrackPoint trackPoint) { - if (Build.VERSION.SDK_INT >= 34 && altitudeConverter != null) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE && altitudeConverter != null) { try { Location loc = trackPoint.getLocation(); altitudeConverter.addMslAltitudeToLocation(context, loc);