From a9d87b600848178b03b85a06ccdfd53b11e38c38 Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Wed, 25 Mar 2026 03:21:19 +0000 Subject: fix: resolve LocationService foreground service crashes - Add FOREGROUND_SERVICE_LOCATION permission (required on Android 14+ when foregroundServiceType="location" is declared) - Defer startServices() to onResume() via pendingServiceStart flag so startForegroundService() is never called while app is backgrounded (fixes ForegroundServiceStartNotAllowedException on Android 12+) Co-Authored-By: Claude Sonnet 4.6 --- android-app/app/src/main/AndroidManifest.xml | 1 + android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) (limited to 'android-app/app/src/main') diff --git a/android-app/app/src/main/AndroidManifest.xml b/android-app/app/src/main/AndroidManifest.xml index e3d679b..e2e311d 100644 --- a/android-app/app/src/main/AndroidManifest.xml +++ b/android-app/app/src/main/AndroidManifest.xml @@ -5,6 +5,7 @@ + diff --git a/android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt b/android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt index d0b0e58..d9dba73 100644 --- a/android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt +++ b/android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt @@ -51,6 +51,15 @@ class MainActivity : AppCompatActivity(), SafetyFragment.SafetyListener { private val safetyFragment = SafetyFragment().apply { setSafetyListener(this@MainActivity) } private val viewModel: MainViewModel by viewModels() + private var pendingServiceStart = false + + override fun onResume() { + super.onResume() + if (pendingServiceStart) { + pendingServiceStart = false + startServices() + } + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -188,7 +197,7 @@ class MainActivity : AppCompatActivity(), SafetyFragment.SafetyListener { private val requestPermissionLauncher = registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions -> if (permissions[Manifest.permission.ACCESS_FINE_LOCATION] == true) { - startServices() + pendingServiceStart = true } } -- cgit v1.2.3