Au lancement de l'application, celle-ci démarre le service qui doit effectuer une tâche réseau. Après avoir ciblé le niveau 26 de l'API, mon application ne parvient pas à démarrer le service sur Android 8.0 en arrière-plan.
Causé par : java.lang.IllegalStateException : Non autorisé à démarrer service Intent { cmp=my.app.tt/com.my.service } : app is in background uid UidRecord{90372b1 u0a136 CEM idle procs:1 seq(0,0,0)}
tel que je le comprends lié à : Limites d'exécution en arrière-plan
La méthode startService() génère désormais une IllegalStateException si une application application ciblant Android 8.0 essaie d'utiliser cette méthode dans une situation où elle n'est pas autorisée à créer des services d'arrière-plan.
" dans une situation où il n'est pas permis "Qu'est-ce que cela signifie réellement ? Et comment le réparer. Je ne veux pas définir mon service comme "premier plan".
9 votes
Cela signifie que vous ne pouvez pas démarrer un service lorsque votre application est en arrière-plan.
0 votes
Vous devrez peut-être Demander des autorisations au moment de l'exécution .
0 votes
Essayez le répartiteur de tâches de Firebase.
25 votes
Cela n'a rien à voir avec les autorisations d'exécution
26 votes
Utilisez
startForegroundService()
au lieu destartService()
.2 votes
Vous pouvez essayer d'utiliser targetSdkVersion 25 mais compiler avec compileSdkVersion 26. De cette façon, vous pourrez utiliser les nouvelles classes d'Android 8 et la toute nouvelle bibliothèque de support, mais votre application ne sera pas limitée par les limites d'exécution en arrière-plan.
3 votes
@KacperDziubek Cela devrait fonctionner mais c'est une solution temporaire car il faudra cibler le SDK26 à l'automne 2018.
0 votes
@RightHandedMonkey Oui, c'est vrai. Lorsque j'ai écrit ce commentaire, il n'avait pas encore été annoncé que Google Play ne permettrait pas de mettre à jour les applications ciblées en dessous du SDK 26.
0 votes
Vérifier cette réponse stackoverflow.com/a/52236155/6401241
0 votes
J'obtiens l'exception sur Android 8 même si je diminue la cible et compile le sdk à 25 (ou 23 d'ailleurs). Y a-t-il une autre solution temporaire que je puisse faire jusqu'à ce que je réécrive mes applications qui fonctionneraient sur mes téléphones Android 8 ? (Je dois faire de sérieuses réécritures mais en attendant nous aurions besoin des applications).
0 votes
Je ne sais pas ce qui se passait avec ce projet, mais je l'ai supprimé et recréé et maintenant ça marche. C'est juste pathétique.
0 votes
J'ai un problème similaire et il a été résolu en ajoutant "setComponent(MYSERVICE)" à une intention de départ. Je ne l'ai cependant pas testé avec le niveau 28 de l'API.
0 votes
Android O et supérieur JobScheduler est recommandé pour les opérations en arrière-plan. stackoverflow.com/a/54570275/5217859