Actualicé mis aplicaciones targetSdkVersion y compileSdkVersion a SDK 31 y comencé a recibir el siguiente bloqueo en la aplicación en un servicio que actualiza el widget en segundo plano.
java.lang.RuntimeException: at android.app.ActivityThread.handleReceiver (ActivityThread.java:4321) at android.app.ActivityThread.access$1600 (ActivityThread.java:247) at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2068) at android.os.Handler.dispatchMessage (Handler.java:106) at android.os.Looper.loopOnce (Looper.java:201) at android.os.Looper.loop (Looper.java:288) at android.app.ActivityThread.main (ActivityThread.java:7842) at java.lang.reflect.Method.invoke (Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1003) Caused by: android.app.ForegroundServiceStartNotAllowedException: at android.app.ForegroundServiceStartNotAllowedException$1.createFromParcel (ForegroundServiceStartNotAllowedException.java:54) at android.app.ForegroundServiceStartNotAllowedException$1.createFromParcel (ForegroundServiceStartNotAllowedException.java:50) at android.os.Parcel.readParcelable (Parcel.java:3333) at android.os.Parcel.createExceptionOrNull (Parcel.java:2420) at android.os.Parcel.createException (Parcel.java:2409) at android.os.Parcel.readException (Parcel.java:2392) at android.os.Parcel.readException (Parcel.java:2334) at android.app.IActivityManager$Stub$Proxy.startService (IActivityManager.java:5971) at android.app.ContextImpl.startServiceCommon (ContextImpl.java:1847) at android.app.ContextImpl.startForegroundService (ContextImpl.java:1823) at android.content.ContextWrapper.startForegroundService (ContextWrapper.java:779) at android.content.ContextWrapper.startForegroundService (ContextWrapper.java:779) at com.mypackage.appname.ui.widget.widget_package.WidgetClassName.onUpdate (WidgetClassName.java:48) at android.appwidget.AppWidgetProvider.onReceive (AppWidgetProvider.java:66) at com.mypackage.appname.ui.widget.widget_package.WidgetClassName.onReceive (WidgetClassName.java) at android.app.ActivityThread.handleReceiver (ActivityThread.java:4312) at android.app.ActivityThread.access$1600 (ActivityThread.java:247) at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2068) at android.os.Handler.dispatchMessage (Handler.java:106) at android.os.Looper.loopOnce (Looper.java:201) at android.os.Looper.loop (Looper.java:288) at android.app.ActivityThread.main (ActivityThread.java:7842) at java.lang.reflect.Method.invoke (Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1003) Caused by: android.os.RemoteException: at com.android.server.am.ActiveServices.startServiceLocked (ActiveServices.java:691) at com.android.server.am.ActiveServices.startServiceLocked (ActiveServices.java:616) at com.android.server.am.ActivityManagerService.startService (ActivityManagerService.java:11839) at android.app.IActivityManager$Stub.onTransact (IActivityManager.java:2519) at com.android.server.am.ActivityManagerService.onTransact (ActivityManagerService.java:2498)Además, si está utilizando algo como Firebase Crashlytics, su stacktrace debe ser algo como esto ->
Caused by android.app.ForegroundServiceStartNotAllowedException: startForegroundService() not allowed due to mAllowStartForeground false: service com.mypackage.appname/.ui.widget.widget_package.MyForegroundServiceName at android.app.ForegroundServiceStartNotAllowedException$1.createFromParcel(ForegroundServiceStartNotAllowedException.java:54) at android.app.ForegroundServiceStartNotAllowedException$1.createFromParcel(ForegroundServiceStartNotAllowedException.java:50) at android.os.Parcel.readParcelable(Parcel.java:3333) at android.os.Parcel.createExceptionOrNull(Parcel.java:2420) at android.os.Parcel.createException(Parcel.java:2409) at android.os.Parcel.readException(Parcel.java:2392) at android.os.Parcel.readException(Parcel.java:2334) at android.app.IActivityManager$Stub$Proxy.startService(IActivityManager.java:5971) at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1847) at android.app.ContextImpl.startForegroundService(ContextImpl.java:1823) at android.content.ContextWrapper.startForegroundService(ContextWrapper.java:779) at android.content.ContextWrapper.startForegroundService(ContextWrapper.java:779) at com.mypackage.appname.ui.widget.widget_package.WidgetClassName.onUpdate(WidgetClassName.java:48) at android.appwidget.AppWidgetProvider.onReceive(AppWidgetProvider.java:66) at com.mypackage.appname.ui.widget.widget_package.WidgetClassName.onReceive(WidgetClassName.java) at android.app.ActivityThread.handleReceiver(ActivityThread.java:4312) at android.app.ActivityThread.access$1600(ActivityThread.java:247) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2068) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7842) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)Estoy agregando la forma de reproducir este problema y solucionarlo, porque no encontré ninguna documentación sobre esto en StackOverflow cuando lo busqué.
Si su aplicación es un MediaPlayer (es decir, utiliza un MediaBrowseService ) y está experimentando el bloqueo de ForegroundServiceStartNotAllowedException , es posible que deba:
Actualice su Manifiesto para especificar que su servicio es para la reproducción de medios usando android:foregroundServiceType="mediaPlayback" en la declaración del Service
Incluya el parámetro ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK en su llamada al método Serivce.startForeground