stop servicio saber permission intent example esta corriendo como android android-service android-permissions

servicio - service intent android



DenegaciĆ³n de permiso: startForeground requiere android.permission.FOREGROUND_SERVICE (2)

Últimamente hemos estado viendo algunas de las siguientes trazas de pila. ¿Por qué podría ser eso? Esto es de 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)


Denegación de permiso: startForeground requiere android.permission.FOREGROUND_SERVICE

Las aplicaciones que se dirigen a Android 9 (nivel API 28) o superior y usan servicios de primer plano deben solicitar el FOREGROUND_SERVICE permission .

Así que ahora necesitamos agregar el permiso de servicio de primer plano en el archivo de manifiesto

  • Permite que una aplicación regular use Service.startForeground

MUESTRA

<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

FOREGROUND_SERVICE es un permiso normal, por lo que el sistema lo otorga automáticamente a la aplicación solicitante.

Consulta las notas de migración de Android 9 / Pie.

  • Cambio

Permiso de servicio en primer plano

  • Resumen

Las aplicaciones que deseen utilizar los servicios de primer plano ahora deben solicitar primero el permiso FOREGROUND_SERVICE. Este es un permiso normal, por lo que el sistema lo otorga automáticamente a la aplicación solicitante. Al iniciar un servicio en primer plano sin el permiso se produce una excepción SecurityException.

También lea startForeground()

  • Las aplicaciones dirigidas a la API Build.VERSION_CODES.P o posterior deben solicitar el permiso Manifest.permission.FOREGROUND_SERVICE para poder utilizar esta API.

Esto es lo que obtienes por no leer las notas de publicación correctamente. Esto comenzó a suceder al configurar targetSdkVersion = 28 (Android 9 / Pie) y se indica claramente en, por ejemplo, las notas de migración :

Las aplicaciones que deseen utilizar los servicios de primer plano ahora deben solicitar primero el permiso FOREGROUND_SERVICE. Este es un permiso normal, por lo que el sistema lo otorga automáticamente a la aplicación solicitante. Al iniciar un servicio en primer plano sin el permiso se produce una excepción SecurityException.

Entonces, la solución es simplemente agregar lo siguiente en AndroidManifest.xml :

<manifest ...> ... <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> ... <application ...> ... </manifest>