Question

Je suis en train de faire un service d'arrière-plan qui devrait mesurer l'utilisation du trafic de diverses applications de manière à pouvoir montrer à l'utilisateur des applications qui consomment le plus de trafic de données.

J'ai trouvé que l'application des pièces de rechange fait exactement, mais après l'avoir installé sur un 1.6 Dell Streak dispositif de Je reçois toujours « Aucune donnée d'utilisation de la batterie disponible » pour « l'utilisation du réseau ». Est-ce que cette fonction à tous les travaux des pièces de rechange? , Je ne pouvais pas trouver aussi un code source de travail pour les pièces de rechange.

https://android.googlesource.com/platform / développement / + / froyo-release / apps / SpareParts
semble être périmées ou incomplètes. (?)

Pièces de rechange semble mesurer par exemple l'utilisation du processeur par application. Comment fait-il que sur un téléphone sans racines?

Mon idée générale de la façon dont pourrait mesurer le trafic par application est de vérifier régulièrement la balise

"sys/class/net/" + sWiFiInterface + "/statistics/rx_bytes"

"sys/class/net/" + sWiFiInterface + "/statistics/tx_bytes"

"sys/class/net/" + sMobileInterface + "/statistics/rx_bytes"

"sys/class/net/" + sMobileInterface + "/statistics/tx_bytes"

fichiers et voir quelle application est actuellement mise au point et donc plus susceptibles de provoquer le trafic réseau généré.

Malheureusement, je ne peux pas trouver comment obtenir l'application ayant le focus.

Je trouve ceci:

Android, comment pour obtenir des informations sur l'activité qui présente actuellement (en foregorund)

mais il semble qu'il est sur le test, non seulement un service 3d partie en cours d'exécution sur l'appareil Android non ancré.

Nous pouvons obtenir ce que les activités en cours d'exécution avec ActivityManager.getCurrentTasks(), mais aucun d'entre eux peut être celui avec mise au point. Il semble que les architectes Android ne veulent pas explicitement des applications de partie 3D de savoir ce que l'application a le focus, pour des raisons de sécurité

(voir http://android.bigresource.com/Track/android-zb2mhvZX4/ ).

Y at-il un moyen de contourner cela?

En outre, si je veux non seulement détecter les activités dévorent le trafic, mais aussi les services, je peux obtenir tous les services en cours d'exécution avec ActivityManager.getCurrentSerives() et même voir pour chacun si elle est en mode d'avant-plan (contrairement à jeter si besoin Android ressources). Mais cela ne m'a encore apporter pas loin.

Toutes les idées?

Était-ce utile?

La solution

Vous pouvez détecter actuellement l'application de premier plan avec appel ActivityManager.getRunningAppProcesses. Il retourne une liste d'enregistrements de RunningAppProcessInfo. Pour déterminer quelle est l'application lors de l'enregistrement de premier plan champ RunningAppProcessInfo.importance pour l'égalité à RunningAppProcessInfo.IMPORTANCE_FOREGROUND.

Mais être articles cet appel à la méthode de ActivityManager.getRunningAppProcesses() doit être réalisée pas dans le thread d'interface utilisateur. Il suffit d'appeler dans le fil de fond (par exemple via AsyncTask) et obtenir des résultats corrects. Consultez mon message pour plus de détails.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top