-
Notifications
You must be signed in to change notification settings - Fork 58
Description
The IsolateHolderService with foregroundServiceType="mediaProjection" works correctly when targetSdkVersion=28, but fails on Android 14/15 when compiled with targetSdkVersion=34 (required for Google Play submission). The service is forcefully terminated due to missing permissions, even when background execution is allowed.
Actual Behavior:
- On Android 14/15, the system terminates the service and subsequently the app
- Error suggests missing permissions despite correct manifest declaration
- Behavior occurs even when user has granted BACKGROUND_SERVICE permission
- Works as expected on Android 13 and below
<service android:name="de.julianassmann.flutter_background.IsolateHolderService" android:enabled="true" android:exported="false" android:foregroundServiceType="mediaProjection" android:permission="android.permission.BIND_JOB_SERVICE" />
And Permissions:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />
crash Log:
E/AndroidRuntime(12034): FATAL EXCEPTION: main E/AndroidRuntime(12034): Process: com.it.mediastream, PID: 12034 E/AndroidRuntime(12034): java.lang.RuntimeException: Unable to start service de.julianassmann.flutter_background.IsolateHolderService@f05fc9a with Intent { act=START cmp=com.it.mediastream/de.julianassmann.flutter_background.IsolateHolderService }: java.lang.SecurityException: Starting FGS with type mediaProjection callerApp=ProcessRecord{ee6725f 12034:com.it.mediastream/u0a386} targetSDK=34 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION] any of the permissions allOf=false [android.permission.CAPTURE_VIDEO_OUTPUT, android:project_media] E/AndroidRuntime(12034): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:5295) E/AndroidRuntime(12034): at android.app.ActivityThread.-$$Nest$mhandleServiceArgs(Unknown Source:0) E/AndroidRuntime(12034): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2580) E/AndroidRuntime(12034): at android.os.Handler.dispatchMessage(Handler.java:112) E/AndroidRuntime(12034): at android.os.Looper.loopOnce(Looper.java:268) E/AndroidRuntime(12034): at android.os.Looper.loop(Looper.java:384) E/AndroidRuntime(12034): at android.app.ActivityThread.main(ActivityThread.java:8921) E/AndroidRuntime(12034): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime(12034): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580) E/AndroidRuntime(12034): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:907) E/AndroidRuntime(12034): Caused by: java.lang.SecurityException: Starting FGS with type mediaProjection callerApp=ProcessRecord{ee6725f 12034:com.it.mediastream/u0a386} targetSDK=34 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION] any of the permissions allOf=false [android.permission.CAPTURE_VIDEO_OUTPUT, android:project_media] E/AndroidRuntime(12034): at android.os.Parcel.createExceptionOrNull(Parcel.java:3242) E/AndroidRuntime(12034): at android.os.Parcel.createException(Parcel.java:3226) E/AndroidRuntime(12034): at android.os.Parcel.readException(Parcel.java:3209) E/AndroidRuntime(12034): at android.os.Parcel.readException(Parcel.java:3151) E/AndroidRuntime(12034): at android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:7326) E/AndroidRuntime(12034): at android.app.Service.startForeground(Service.java:776) E/AndroidRuntime(12034): at de.julianassmann.flutter_background.IsolateHolderService.startService(IsolateHolderService.kt:128) E/AndroidRuntime(12034): at de.julianassmann.flutter_background.IsolateHolderService.onStartCommand(IsolateHolderService.kt:53) E/AndroidRuntime(12034): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:5277) E/AndroidRuntime(12034): ... 9 more E/AndroidRuntime(12034): Caused by: android.os.RemoteException: Remote stack trace: E/AndroidRuntime(12034): at com.android.server.am.ActiveServices.validateForegroundServiceType(ActiveServices.java:2921) E/AndroidRuntime(12034): at com.android.server.am.ActiveServices.setServiceForegroundInnerLocked(ActiveServices.java:2605) E/AndroidRuntime(12034): at com.android.server.am.ActiveServices.setServiceForegroundLocked(ActiveServices.java:1859) E/AndroidRuntime(12034): at com.android.server.am.ActivityManagerService.setServiceForeground(ActivityManagerService.java:14552) E/AndroidRuntime(12034): at android.app.IActivityManager$Stub.onTransact$setServiceForeground$(IActivityManager.java:12183) E/AndroidRuntime(12034):