Dernièrement, nous avons soudainement vu quelques-unes des traces de pile suivantes. Pourquoi cela pourrait-il être? C'est à partir du moment où l'application tente de déplacer un service de commentaires audio au premier plan avec une notification multimédia et tout.
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)
la source
targetSdkVersion
est inférieur à 28, nous n'avons pas besoin d'autorisation pour exécuter les services Foreground sur les appareils exécutant 28?maxSdkVersion
.Les applications qui ciblent Android 9 (niveau d'API 28) ou supérieur et utilisent des services de premier plan doivent demander l'extension
FOREGROUND_SERVICE permission
.Nous devons maintenant ajouter l' autorisation de service Foreground dans le fichier manifeste
Service.startForeground
ÉCHANTILLON
Vérifiez ceci les notes de migration d'Android 9 / Pie
Lire aussi
startForeground()
Build.VERSION_CODES.P
ou une version ultérieure doit demander l'autorisationManifest.permission.FOREGROUND_SERVICE
pour utiliser cette API.la source
Pour l'API de niveau 28 ou supérieur, il nécessite l'autorisation FOREGROUND_SERVICE. Sinon, il ne peut pas fonctionner et a obtenu une exception.
Il sera résolu en ajoutant
dans le fichier AndroidManifest.xml.
la source
Une valeur
targetSdkVersion
d'au moins28
sera obligatoire à partir du 1er novembre 2019 pour les mises à jour d'applications dans le Play Store. Vous devrez donc modifier l'API cible, puis demander l'autorisationFOREGROUND_SERVICE
d'éviter le plantage surstartForeground()
la source
Notant que
FOREGROUND_SERVICE
cela ne nécessite pas d'exigence d'autorisation d'exécution. ajouter seulement ci-dessous aux manifestesla ligne ci-dessus doit être ajoutée avant
<application
la source