Écoutez les événements ActivityManager?
-
20-09-2019 - |
Question
est-il possible en quelque sorte d'écouter les événements de la ActivityManager, par exemple lorsque les activités sont mis en marche? Le ActivityManager envoie des émissions? Je havn't rien trouvé indiquant qu'il fait.
Ce que je dois essentiellement à faire: Je veux que mon application pour lancer une de mes activités chaque fois qu'un certain (thirdparty) application est lancée / prend le focus. Le problème est ce qui doit se passer avant l'application thirdparty est réellement affichée.
Ce que j'ai essayé jusqu'à des solutions de contournement:
- Sortie Logcat: je fais une recherche logcat chaque 0.8s (filtrée pour afficher les événements ActivityManager seulement) mais mange à beaucoup de ressources
- getRunningTasks: ralentit le téléphone beaucoup trop et n'est pas très sûr, comme une activité pourrait être en cours d'exécution, mais pas au point
Toutes les idées?
La solution
Je suppose qu'il n'y a pas vraiment d'autre moyen d'héritage à gérer l'état du système glabal, seul
(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.getRecentTasks () -. Retourne une liste des tâches qui sont en cours d'exécution, les plus récentes étant les premiers et les plus anciens après pour
Pour plus de détails vérifier docs
Peut-être que Android est un outil du système Linux, vous pouvez exécuter comme
Runtime.getRuntime().exec("ps -aux | grep smth")
Mais je pense qu'il serait difficile de détecter l'application java particulier.
Autres conseils
Je pense que vous pouvez utiliser le mode de lancement pour déterminer quelle activité pour lancer au plus haut niveau. S'il vous plaît vérifier la question: Android singleTask ou le mode de lancement de SingleInstance . Peut-être que cela vous aidera.
J'ai eu un coup d'oeil dans la source Android, mais il ne semble pas être des événements diffusés.
https://android.googlesource.com/platform/packages/providers/ApplicationsProvider