Frage

Ich versuche einen Hintergrunddienst zu erstellen, der den Verkehrsnutzung verschiedener Anwendungen messen sollte, um dem Benutzer anzuzeigen, welche Apps den meisten Datenverkehr konsumieren.

Ich fand, dass die Ersatzteil -App genau das tut, aber nachdem ich sie auf einem 1.6 -Dell -Streifen -Gerät installiert habe, erhalte ich immer "keine Batterieverbrauchsdaten" für "Netzwerknutzung". Funktioniert diese Funktion bei allen Ersatzteilen? Außerdem konnte ich keinen Arbeitsquellcode für Ersatzteile finden.

https://android.googlesource.com/platform/development/+/froyo-release/apps/spareparts
Sieht veraltet oder unvollständig aus. (?)

Ersatzteile scheinen jedoch die EG -CPU -Verwendung pro App zu messen. Wie macht es das auf einem ungewurzelten Telefon?

Meine allgemeine Vorstellung davon, wie der Verkehr pro App gemessen werden könnte, ist die regelmäßige Überprüfung der

"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"

Dateien und um zu sehen, welche App derzeit konzentriert und daher am wahrscheinlichsten den generierten Netzwerkverkehr verursacht.

Leider kann ich nicht finden, wie ich die App derzeit konzentrieren kann.

Ich habe das gefunden:

Android, wie können Sie Informationen darüber erhalten, welche Aktivitäten derzeit angezeigt werden (in Underegorund)?

Es scheint jedoch um zu testen, nicht nur um einen 3D-Party-Service, der auf nicht verwurzeltem Android-Gerät ausgeführt wird.

Wir können bekommen, mit welchen Aktivitäten laufen ActivityManager.getCurrentTasks(), aber jeder von ihnen kann derjenige sein, der sich mit Fokus befindet. Es scheint, als ob die Android -Architekten ausdrücklich nicht möchten, dass 3D -Party -Apps aufgrund von Sicherheitsbedenken konzentrieren, welche App sich konzentriert

(sehen http://android.ibigresource.com/track/android-zb2mhvzx4/).

Gibt es einen Weg um das?

Wenn ich nicht nur feststellen möchte, welche Aktivitäten den Datenverkehr auffressen, sondern auch welche Dienstleistungen, kann ich alle derzeit mit Diensten mit dem Laufen erhaltenActivityManager.getCurrentSerives()und sogar für jeden, wenn es sich im Vordergrundmodus befindet (anders als ausgeworfen, wenn Android Ressourcen benötigt). Aber das bringt mich wieder nicht weit.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Sie können derzeit die Vordergrundanwendung mit erkennen ActivityManager.getRunningAppProcesses Anruf. Es wird eine Liste von zurückgeben RunningAppProcessInfo Aufzeichnungen. Um festzustellen, welche Anwendung auf dem Vordergrundprüfung ist RunningAppProcessInfo.importance Feld für Gleichheit zu RunningAppProcessInfo.IMPORTANCE_FOREGROUND.

Aber seien Sie mit dieser Anruf ActivityManager.getRunningAppProcesses() Die Methode muss nicht im UI -Thread durchgeführt werden. Nennen Sie es einfach im Hintergrund -Thread (zum Beispiel über Asynctask) und es gibt korrekte Ergebnisse zurück. Prüfen mein Post Für weitere Details.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top