diff options
| author | Peter Stone <thepeterstone@gmail.com> | 2026-03-25 03:21:19 +0000 |
|---|---|---|
| committer | Peter Stone <thepeterstone@gmail.com> | 2026-03-25 03:21:19 +0000 |
| commit | a9d87b600848178b03b85a06ccdfd53b11e38c38 (patch) | |
| tree | f9f67da9441a1cf460de307892e4f199a0174fd9 | |
| parent | 7a6e0c880e3c99bf1b7f525b341664289233a919 (diff) | |
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 <noreply@anthropic.com>
| -rw-r--r-- | android-app/app/src/main/AndroidManifest.xml | 1 | ||||
| -rw-r--r-- | android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt | 11 |
2 files changed, 11 insertions, 1 deletions
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 @@ <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> + <uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> 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 } } |
