Últimamente hemos estado viendo algunos de los siguientes rastros de pila. ¿Por qué podría ser eso? Esto es cuando la aplicación intenta mover un servicio de comentarios de audio al primer plano con una notificación de medios y todo.
java.lang.SecurityException: Permission Denial: startForeground from pid=1824, uid=10479 requires android.permission.FOREGROUND_SERVICE
at android.os.Parcel.createException(Parcel.java:1942)
at android.os.Parcel.readException(Parcel.java:1910)
at android.os.Parcel.readException(Parcel.java:1860)
at android.app.IActivityManager$Stub$Proxy.setServiceForeground(IActivityManager.java:5198)
at android.app.Service.startForeground(Service.java:695)
at com.example.app.services.AudioService.setUpMediaNotification(AudioService.java:372)
at com.example.app.services.AudioService.setUpAndStartAudioFeed(AudioService.java:328)
at com.example.app.services.AudioService.onStartCommand(AudioService.java:228)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3667)
at android.app.ActivityThread.access$1600(ActivityThread.java:199)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1681)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.am.ActivityManagerService.enforcePermission(ActivityManagerService.java:9186)
at com.android.server.am.ActiveServices.setServiceForegroundInnerLocked(ActiveServices.java:1189)
at com.android.server.am.ActiveServices.setServiceForegroundLocked(ActiveServices.java:870)
at com.android.server.am.ActivityManagerService.setServiceForeground(ActivityManagerService.java:20434)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:976)
fuente
targetSdkVersion
es inferior a 28, no necesitamos ningún permiso para ejecutar los servicios de primer plano en dispositivos que ejecutan 28?maxSdkVersion
.Las aplicaciones que se dirigen a Android 9 (nivel de API 28) o superior y utilizan servicios en primer plano deben solicitar el
FOREGROUND_SERVICE permission
.Así que ahora necesitamos agregar el permiso del servicio en primer plano en el archivo de manifiesto
Service.startForeground
MUESTRA
Mira esto las notas de migración de Android 9 / Pie
Lea también
startForeground()
Build.VERSION_CODES.P
o posterior deben solicitar el permisoManifest.permission.FOREGROUND_SERVICE
para usar esta API.fuente
Para el nivel de API 28 o superior, requiere el permiso FOREGROUND_SERVICE. De lo contrario, no se puede ejecutar y tiene una excepción.
Se resolverá agregando
en el archivo AndroidManifest.xml.
fuente
Al
targetSdkVersion
menos28
, será obligatorio a partir del 1 de noviembre de 2019 para las actualizaciones de aplicaciones en Play Store. Por lo tanto, deberá cambiar la API de destino y luego solicitar el permisoFOREGROUND_SERVICE
para evitar el bloqueo enstartForeground()
fuente
Teniendo en cuenta que
FOREGROUND_SERVICE
no requiere un requisito de permiso de tiempo de ejecución. solo agregue a continuación a Manifiestosla línea anterior debe agregarse antes
<application
fuente