Mon application a un service et une activité. Depuis le service, l'activité est appelée avec le code suivant:
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
même sans les drapeaux, normalement la fenêtre d'activité est affichée avec sa disposition correcte. Cependant, sur Xiaomi Redmi Note 4 avec Android 7, la disposition des activités n'est pas affichée. Je ne vois que la ligne suivante sur logcat:
I / Timeline: Timeline: Activity_launch_request time: 281438674 intention: Intent {flg = 0x30000000 cmp = com.test.app / .MainActivity}
Je pense que ce n'est pas un problème Android 7 (API 24) car sur un autre appareil avec Android 7, le service peut démarrer l'activité avec succès. Je suppose que MIUI empêche le lancement de l'activité du service.
J'ai essayé de changer la façon dont l'activité était définie dans le manifeste. J'ai également essayé avec plusieurs drapeaux différents. Tous mes tests ont échoué. Je n'ai pas réussi à démarrer l'activité. Le pire problème est qu'il n'y a aucune erreur / exception dans les journaux.
Des idées à ce sujet s'il vous plaît?
Réponses:
Dans l'écran Informations sur l'application depuis l'application Paramètres système> Autres autorisations> Afficher les fenêtres contextuelles lors de l'exécution en arrière-plan.
Cela semble introduit dans MIUI 11.
Edit: voici un bout de code que j'utilise. J'ajoute cela dans une liste d'autorisation dans un
RecyclerView
.MISE À JOUR: Pour vérifier si cette autorisation est accordée, vous pouvez utiliser un service déjà en cours d'exécution et lancer une activité transparente factice, et dans le
onCreate
rappel sur unLocalBroadcastManager
ou similaire et vous saurez qu'elle est accordée. C'est une solution laide, mais elle peut être utile pour certains.la source