Skip to content

Conversation

mahibi
Copy link
Collaborator

@mahibi mahibi commented Oct 17, 2025

when record_audio permission was not granted, this crash appeared because foreground service must only be started with the granted permission:

2025-10-17 09:56:01.459 14445-14445 AndroidRuntime          com.nextcloud.talk2                  E  FATAL EXCEPTION: main (Ask Gemini)
                                                                                                    Process: com.nextcloud.talk2, PID: 14445
                                                                                                    java.lang.RuntimeException: Unable to start service com.nextcloud.talk.services.CallForegroundService@a9cff99 with Intent { cmp=com.nextcloud.talk2/com.nextcloud.talk.services.CallForegroundService (has extras) }: java.lang.SecurityException: Starting FGS with type microphone callerApp=ProcessRecord{1b5bf24 14445:com.nextcloud.talk2/u0a397} targetSDK=35 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_MICROPHONE] any of the permissions allOf=false [android.permission.CAPTURE_AUDIO_HOTWORD, android.permission.CAPTURE_AUDIO_OUTPUT, android.permission.CAPTURE_MEDIA_OUTPUT, android.permission.CAPTURE_TUNER_AUDIO_INPUT, android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT, android.permission.RECORD_AUDIO]  and the app must be in the eligible state/exemptions to access the foreground only permission
                                                                                                    	at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:5295)
                                                                                                    	at android.app.ActivityThread.-$$Nest$mhandleServiceArgs(Unknown Source:0)
                                                                                                    	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2580)
                                                                                                    	at android.os.Handler.dispatchMessage(Handler.java:112)
                                                                                                    	at android.os.Looper.loopOnce(Looper.java:268)
                                                                                                    	at android.os.Looper.loop(Looper.java:384)
                                                                                                    	at android.app.ActivityThread.main(ActivityThread.java:8921)
                                                                                                    	at java.lang.reflect.Method.invoke(Native Method)
                                                                                                    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
                                                                                                    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:907)
                                                                                                    Caused by: java.lang.SecurityException: Starting FGS with type microphone callerApp=ProcessRecord{1b5bf24 14445:com.nextcloud.talk2/u0a397} targetSDK=35 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_MICROPHONE] any of the permissions allOf=false [android.permission.CAPTURE_AUDIO_HOTWORD, android.permission.CAPTURE_AUDIO_OUTPUT, android.permission.CAPTURE_MEDIA_OUTPUT, android.permission.CAPTURE_TUNER_AUDIO_INPUT, android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT, android.permission.RECORD_AUDIO]  and the app must be in the eligible state/exemptions to access the foreground only permission
                                                                                                    	at android.os.Parcel.createExceptionOrNull(Parcel.java:3242)
                                                                                                    	at android.os.Parcel.createException(Parcel.java:3226)
                                                                                                    	at android.os.Parcel.readException(Parcel.java:3209)
                                                                                                    	at android.os.Parcel.readException(Parcel.java:3151)
                                                                                                    	at android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:7326)
                                                                                                    	at android.app.Service.startForeground(Service.java:863)
                                                                                                    	at com.nextcloud.talk.services.CallForegroundService.onStartCommand(CallForegroundService.kt:38)
                                                                                                    	at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:5277)
                                                                                                    	at android.app.ActivityThread.-$$Nest$mhandleServiceArgs(Unknown Source:0) 
                                                                                                    	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2580) 
                                                                                                    	at android.os.Handler.dispatchMessage(Handler.java:112) 
                                                                                                    	at android.os.Looper.loopOnce(Looper.java:268) 
                                                                                                    	at android.os.Looper.loop(Looper.java:384) 
                                                                                                    	at android.app.ActivityThread.main(ActivityThread.java:8921) 
                                                                                                    	at java.lang.reflect.Method.invoke(Native Method) 
                                                                                                    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580) 
                                                                                                    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:907) 
                                                                                                    Caused by: android.os.RemoteException: Remote stack trace:
                                                                                                    	at com.android.server.am.ActiveServices.validateForegroundServiceType(ActiveServices.java:2921)
                                                                                                    	at com.android.server.am.ActiveServices.setServiceForegroundInnerLocked(ActiveServices.java:2605)
                                                                                                    	at com.android.server.am.ActiveServices.setServiceForegroundLocked(ActiveServices.java:1859)
                                                                                                    	at com.android.server.am.ActivityManagerService.setServiceForeground(ActivityManagerService.java:14552)
                                                                                                    	at android.app.IActivityManager$Stub.onTransact$setServiceForeground$(IActivityManager.java:12183)

🖼️ Screenshots

🏚️ Before 🏡 After
B A

🚧 TODO

  • ...

🏁 Checklist

  • ⛑️ Tests (unit and/or integration) are included or not needed
  • 🔖 Capability is checked or not needed
  • 🔙 Backport requests are created or not needed: /backport to stable-xx.x
  • 📅 Milestone is set
  • 🌸 PR title is meaningful (if it should be in the changelog: is it meaningful to users?)

when record_audio permission was not granted, this crash appeared because foreground service must only be started with the granted permission:

2025-10-17 09:56:01.459 14445-14445 AndroidRuntime          com.nextcloud.talk2                  E  FATAL EXCEPTION: main (Ask Gemini)
                                                                                                    Process: com.nextcloud.talk2, PID: 14445
                                                                                                    java.lang.RuntimeException: Unable to start service com.nextcloud.talk.services.CallForegroundService@a9cff99 with Intent { cmp=com.nextcloud.talk2/com.nextcloud.talk.services.CallForegroundService (has extras) }: java.lang.SecurityException: Starting FGS with type microphone callerApp=ProcessRecord{1b5bf24 14445:com.nextcloud.talk2/u0a397} targetSDK=35 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_MICROPHONE] any of the permissions allOf=false [android.permission.CAPTURE_AUDIO_HOTWORD, android.permission.CAPTURE_AUDIO_OUTPUT, android.permission.CAPTURE_MEDIA_OUTPUT, android.permission.CAPTURE_TUNER_AUDIO_INPUT, android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT, android.permission.RECORD_AUDIO]  and the app must be in the eligible state/exemptions to access the foreground only permission
                                                                                                    	at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:5295)
                                                                                                    	at android.app.ActivityThread.-$$Nest$mhandleServiceArgs(Unknown Source:0)
                                                                                                    	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2580)
                                                                                                    	at android.os.Handler.dispatchMessage(Handler.java:112)
                                                                                                    	at android.os.Looper.loopOnce(Looper.java:268)
                                                                                                    	at android.os.Looper.loop(Looper.java:384)
                                                                                                    	at android.app.ActivityThread.main(ActivityThread.java:8921)
                                                                                                    	at java.lang.reflect.Method.invoke(Native Method)
                                                                                                    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
                                                                                                    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:907)
                                                                                                    Caused by: java.lang.SecurityException: Starting FGS with type microphone callerApp=ProcessRecord{1b5bf24 14445:com.nextcloud.talk2/u0a397} targetSDK=35 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_MICROPHONE] any of the permissions allOf=false [android.permission.CAPTURE_AUDIO_HOTWORD, android.permission.CAPTURE_AUDIO_OUTPUT, android.permission.CAPTURE_MEDIA_OUTPUT, android.permission.CAPTURE_TUNER_AUDIO_INPUT, android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT, android.permission.RECORD_AUDIO]  and the app must be in the eligible state/exemptions to access the foreground only permission
                                                                                                    	at android.os.Parcel.createExceptionOrNull(Parcel.java:3242)
                                                                                                    	at android.os.Parcel.createException(Parcel.java:3226)
                                                                                                    	at android.os.Parcel.readException(Parcel.java:3209)
                                                                                                    	at android.os.Parcel.readException(Parcel.java:3151)
                                                                                                    	at android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:7326)
                                                                                                    	at android.app.Service.startForeground(Service.java:863)
                                                                                                    	at com.nextcloud.talk.services.CallForegroundService.onStartCommand(CallForegroundService.kt:38)
                                                                                                    	at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:5277)
                                                                                                    	at android.app.ActivityThread.-$$Nest$mhandleServiceArgs(Unknown Source:0) 
                                                                                                    	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2580) 
                                                                                                    	at android.os.Handler.dispatchMessage(Handler.java:112) 
                                                                                                    	at android.os.Looper.loopOnce(Looper.java:268) 
                                                                                                    	at android.os.Looper.loop(Looper.java:384) 
                                                                                                    	at android.app.ActivityThread.main(ActivityThread.java:8921) 
                                                                                                    	at java.lang.reflect.Method.invoke(Native Method) 
                                                                                                    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580) 
                                                                                                    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:907) 
                                                                                                    Caused by: android.os.RemoteException: Remote stack trace:
                                                                                                    	at com.android.server.am.ActiveServices.validateForegroundServiceType(ActiveServices.java:2921)
                                                                                                    	at com.android.server.am.ActiveServices.setServiceForegroundInnerLocked(ActiveServices.java:2605)
                                                                                                    	at com.android.server.am.ActiveServices.setServiceForegroundLocked(ActiveServices.java:1859)
                                                                                                    	at com.android.server.am.ActivityManagerService.setServiceForeground(ActivityManagerService.java:14552)
                                                                                                    	at android.app.IActivityManager$Stub.onTransact$setServiceForeground$(IActivityManager.java:12183)

Signed-off-by: Marcel Hibbe <[email protected]>
@mahibi mahibi requested a review from rapterjet2004 October 17, 2025 08:41
@mahibi mahibi self-assigned this Oct 17, 2025
@mahibi mahibi added the 3. to review Waiting for reviews label Oct 17, 2025
Copy link
Contributor

APK file: https://www.kaminsky.me/nc-dev/android-artifacts/5483.apk

qrcode

To test this change/fix you can simply download above APK file and install and test it in parallel to your existing Nextcloud app.

@mahibi mahibi enabled auto-merge October 17, 2025 13:32
Copy link
Contributor

Codacy

Lint

TypemasterPR
Warnings99100
Errors03

SpotBugs

CategoryBaseNew
Bad practice66
Correctness1111
Dodgy code6262
Internationalization33
Malicious code vulnerability33
Performance44
Security11
Total9090

Lint increased!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

3. to review Waiting for reviews

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants