11 votes

Détecter les lancements d'activité Android

J'ai recherché sur le stackoverflow pour cette question et trouvé : Android, Détecter quand d'autres applications sont lancées et Moyen fiable de détecter le lancement d'une application depuis l'écran d'accueil / bureau? , qui répond en partie à ma question mais ce n'est pas encore suffisant.

Ce que je veux faire Je veux créer un widget/application qui montre à l'utilisateur de l'appareil une liste des applications récentes et une liste des applications les plus utilisées.

Problème Comment puis-je obtenir des données précises sur les applications afin de construire une liste des applications les plus utilisées.

Informations de base

  • Je compile mon propre code Android OS (basé sur 4.2) donc j'ai accès à tout.
  • Je développe également le lanceur.
  • Il doit passer le CTS et être approuvé par Google.
  • Je peux faire l'application avec des privilèges système.
  • Je sais que cela pourrait poser un problème de sécurité pour Google.

Quelques solutions

Les applications récentes peuvent être trouvées via ActityManager, la méthode getRecentApps, donc pas de problème de ce côté-là.

J'ai cherché sur le web pour cela et j'ai déjà trouvé les solutions suivantes:

  1. Utiliser un service pour interroger le activityManager, la méthode getRunningTasks chaque X secondes et construire la liste (informations imprécises, utilisant également beaucoup de batterie).
  2. Utiliser le logcat pour obtenir ces informations (semble être une astuce à mes yeux, nécessite des autorisations système)
  3. Modifier le activityManager lui-même pour fournir ces informations (échouera probablement aux tests CTS)
  4. Utiliser le lanceur pour vérifier les applications qui ont été lancées (manque les applications lancées à l'intérieur d'autres applications)

Y a-t-il autre chose que j'aurais manqué?

Merci d'avance, Tiago Costa

1voto

Akhil Points 2109

La mise en œuvre par défaut de la boîte de dialogue des applications récentes d'Android est la meilleure référence pour vous, regardez ici..vérifiez reloadButtons()

final ActivityManager am = (ActivityManager)
                context.getSystemService(Context.ACTIVITY_SERVICE);
        final List recentTasks =
                am.getRecentTasks(MAX_RECENT_TASKS, ActivityManager.RECENT_IGNORE_UNAVAILABLE);

Vous pouvez essayer de manière similaire..

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X