Je souhaite avoir une application qui s'exécute en arrière-plan, qui sait quand l'une des applications intégrées (messagerie, contacts, etc.) est en cours d'exécution.
Donc mes questions sont:
Comment dois-je exécuter mon application en arrière-plan.
Comment mon application d'arrière-plan peut savoir quelle est l'application en cours d'exécution au premier plan.
Les réponses de personnes expérimentées seraient grandement appréciées.
Réponses:
En ce qui concerne "2. Comment mon application d'arrière-plan peut savoir quelle est l'application actuellement en cours d'exécution au premier plan."
N'utilisez PAS la
getRunningAppProcesses()
méthode car cela renvoie toutes sortes de déchets système de mon expérience et vous obtiendrez plusieurs résultats qui ontRunningAppProcessInfo.IMPORTANCE_FOREGROUND
. UtilisezgetRunningTasks()
plutôtC'est le code que j'utilise dans mon service pour identifier l'application de premier plan actuelle, c'est vraiment simple:
C'est tout, alors vous pouvez facilement accéder aux détails de l'application / activité de premier plan:
Cela nécessite une autorisation supplémentaire dans l'activité menifest et fonctionne parfaitement.
la source
getRunningTasks()
est obsolète dans l'API 21 (Lollipop) - developer.android.com/reference/android/app/…J'ai dû trouver la bonne solution à la dure. le code ci-dessous fait partie de cyanogenmod7 (les modifications de la tablette) et est testé sur android 2.3.3 / gingerbread.
méthodes:
nous espérons que cela répond à ce problème dans toute l'étendue (:
la source
mActivityManager.getRunningTasks(1).get(0).topActivity
?Essayez le code suivant:
Le nom du processus est le nom du package de l'application s'exécutant au premier plan. Comparez-le au nom du package de votre application. S'il en est de même, votre application s'exécute au premier plan.
J'espère que cela répond à votre question.
la source
À partir de Lollipop, cela a changé. Veuillez trouver le code ci-dessous, avant que cet utilisateur n'ait à accéder aux paramètres -> Sécurité -> (Faites défiler vers le bas) Applications avec accès à l'utilisation -> Donnez les autorisations à notre application
la source
Pour les cas où nous devons vérifier à partir de notre propre service / thread d'arrière-plan si notre application est au premier plan ou non. Voici comment je l'ai implémenté, et cela fonctionne très bien pour moi:
Maintenant, pour vérifier à partir d'autres classes, si l'application est au premier plan ou non, appelez simplement:
Mise à jour (comme indiqué par SHS ):
N'oubliez pas de vous inscrire aux rappels dans la
onCreate
méthode de votre classe Application .la source
Afin de déterminer l'application de premier plan, vous pouvez utiliser pour détecter l'application de premier plan, vous pouvez utiliser https://github.com/ricvalerio/foregroundappchecker . Il utilise différentes méthodes en fonction de la version Android de l'appareil.
En ce qui concerne le service, le repo fournit également le code dont vous avez besoin. Essentiellement, laissez android studio créer le service pour vous, puis onCreate ajoutez l'extrait de code qui utilise appChecker. Vous devrez cependant demander la permission.
la source
Compte tenu de ce qui
getRunningTasks()
est obsolète etgetRunningAppProcesses()
n'est pas fiable, j'ai pris la décision de combiner 2 approches mentionnées dans StackOverflow:la source
La classe ActivityManager est l'outil approprié pour voir quels processus sont en cours d'exécution.
Pour s'exécuter en arrière-plan, vous souhaitez généralement utiliser un service .
la source
Cela a fonctionné pour moi. Mais il ne donne que le nom du menu principal. C'est-à-dire que si l'utilisateur a ouvert l'écran Paramètres -> Bluetooth -> Nom du périphérique, RunningAppProcessInfo l'appelle simplement Paramètres. Impossible de percer Furthur
la source
Faites quelque chose comme ceci:
la source
En sucette et plus:
Ajouter au mainfest:
Et faites quelque chose comme ça:
la source
C'est ainsi que je vérifie si mon application est au premier plan. Remarque J'utilise AsyncTask comme suggéré par la documentation officielle d' Android .
»
et exécutez AsyncTask comme ceci.
new CheckIfForeground().execute();
la source
J'ai combiné deux solutions en une seule méthode et cela fonctionne pour moi pour l'API 24 et pour l'API 21. D'autres que je n'ai pas testées.
Le code dans Kotlin:
et dans Manifest
la source