summaryrefslogtreecommitdiff
path: root/android-app/app/src/main
diff options
context:
space:
mode:
authorPeter Stone <thepeterstone@gmail.com>2026-03-25 03:21:19 +0000
committerPeter Stone <thepeterstone@gmail.com>2026-03-25 03:21:19 +0000
commita9d87b600848178b03b85a06ccdfd53b11e38c38 (patch)
treef9f67da9441a1cf460de307892e4f199a0174fd9 /android-app/app/src/main
parent7a6e0c880e3c99bf1b7f525b341664289233a919 (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>
Diffstat (limited to 'android-app/app/src/main')
-rw-r--r--android-app/app/src/main/AndroidManifest.xml1
-rw-r--r--android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt11
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
}
}