Ultimamente, temos visto alguns dos seguintes rastreamentos de pilha. Por que poderia ser isso? Isso ocorre quando o aplicativo tenta mover um serviço de comentários de áudio para o primeiro plano com uma notificação de mídia e tudo.
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)
fonte
targetSdkVersion
for menor que 28, não precisamos de permissão para executar os serviços de primeiro plano em dispositivos com 28?maxSdkVersion
.Os aplicativos que segmentam o Android 9 (API nível 28) ou superior e usam serviços em primeiro plano devem solicitar o
FOREGROUND_SERVICE permission
.Então agora precisamos adicionar a permissão do serviço Foreground no arquivo manifest
Service.startForeground
AMOSTRA
Verifique as notas de migração do Android 9 / Pie
Leia também
startForeground()
Build.VERSION_CODES.P
ou posterior devem solicitar a permissãoManifest.permission.FOREGROUND_SERVICE
para usar esta API.fonte
Para o nível 28 da API ou superior, é necessária a permissão FOREGROUND_SERVICE. Caso contrário, ele não pode ser executado e obteve uma exceção.
Isso será resolvido adicionando
no arquivo AndroidManifest.xml.
fonte
A
targetSdkVersion
de pelo menos28
será obrigatória a partir de 1º de novembro de 2019 para atualizações de aplicativos na Play Store. Portanto, você precisará alterar a API de destino e solicitar a permissãoFOREGROUND_SERVICE
para evitar a falha nostartForeground()
fonte
Observando que
FOREGROUND_SERVICE
não requer requisito de permissão de tempo de execução. adicione apenas abaixo aos Manifestosa linha acima deve ser adicionada antes
<application
fonte