Wie bekomme ich die aktuelle Netzwerknutzung von App (oder insgesamt), auch auf Android N?

Wie der Titel sagt. Ich möchte wissen, wie viele Bytes pro Sekunde eine bestimmte App zu bestimmten Zeit verwenden.

Vielleicht kann ich den Befehl " netstat " verwenden? Aber wenn ja, wie kann ich es zu einem bestimmten app / process filtern?

  • Programmatisch zentrieren TextView Text
  • Android ViewPager: Update-Bildschirm, aber Cache-Fragmente in ViewPager
  • Konnte nicht laufen Programme auf Eclipse android
  • Lesen von Android USB Zubehör wirft ENODEV IOException
  • Unterschied zwischen rawquery und execSQL in android sqlite Datenbank
  • Fortsetzen Sie die Top-Aktivität, anstatt die Launcher-Aktivität zu starten
  • Muss ich auch ein paar Erlaubnis haben, es zu tun?

    Derzeit sagen die Leute TrafficStats.getUidRxBytes (packageInfo.uid), aber von hier aus: https://developer.android.com/reference/android/net/TrafficStats.html#getUidRxBytes(int) , es heißt, es wird nicht unterstützt N, und dass ich stattdessen NetworkStatsManager verwenden sollte. Gibt es ein Beispiel, um es zu benutzen?

    Vielleicht eine zusammengesetzte Lösung?

    EDIT: Ich habe versucht, NetworkStatsManager auf Android N zu verwenden, aber ich habe es versagt. Ich kann keine Probe von, wie es zu verwenden, und alle stackOverflow Fragen über es waren ähnlich in der Zeit nicht in der Lage, es gut zu verwenden. Bitte, wenn jemand weiß, wie man es benutzt, darüber schreiben.

  • Android-Daten Bindung erzeugt "Quellordner an falscher Stelle generiert"
  • Android; Überprüfen Sie, ob eine Datei existiert, ohne eine neue zu erstellen
  • Ändern Sie App-Assets mit der Datei-API von Phonegap
  • Zeigen Sie einen Teil der Webseite auf dem Webview android an
  • Es konnte keine Verbindung zu Tridion Core Service von einem Android-Client hergestellt werden
  • Android WebView Fokus Problem
  • 2 Solutions collect form web for “Wie bekomme ich die aktuelle Netzwerknutzung von App (oder insgesamt), auch auf Android N?”

    Die Verwendung von NetworkStats ist nicht kompliziert.

    Die Geräte-API-Ebene muss mindestens 23 sein. Hier sind einige Schritte erforderlich, bevor Sie die Nutzung von NetworkStatsManager starten

    1. Deklarieren Sie die erforderlichen Berechtigungen in AndroidManifest.xml :

       <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions"/> 
    2. Bitte um Erlaubnis in der Activity

      android.permission.PACKAGE_USAGE_STATS ist keine normale Berechtigung, kann daher nicht einfach angefordert werden. Um zu prüfen, ob die Erlaubnis erteilt wurde, überprüfen Sie:

       AppOpsManager appOps = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE); int mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, android.os.Process.myUid(), getPackageName()); if (mode == AppOpsManager.MODE_ALLOWED) { return true; } 

      Um diese Erlaubnis zu bitten, rufen Sie einfach Intent :

       Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS); startActivity(intent); 

      Eine weitere Genehmigung ist auch erforderlich: Manifest.permission.READ_PHONE_STATE . Allerdings ist dies eine normale Berechtigung, so kann als jede andere Erlaubnis angefordert werden

    3. Verwenden Sie NetworkStatsManager :

      Um es zu erhalten, rufen Sie an:

       NetworkStatsManager networkStatsManager = (NetworkStatsManager) getApplicationContext().getSystemService(Context.NETWORK_STATS_SERVICE); 

      Alles, was von NetworkStatsManager abgerufen wird, ist in Buckets verpackt. Dies ist nur eine einfache POJO, die die Daten hält.

      GLOBAL:

      Um die Gesamtnutzung für WiFi zu erhalten :

       NetworkStats.Bucket bucket; try { bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_WIFI, "", 0, System.currentTimeMillis()); } catch (RemoteException e) { return -1; } 

      Von NetworkStats.Bucket können zwei Methoden aufgerufen werden, um die Verwendung (in BPS) zu erhalten:

       bucket.getRxBytes(); bucket.getTxBytes(); 

      Das Erhalten der Daten für das Mobilfunknetz ist härter. Um den Bucket Aufruf zu erhalten:

       public long getAllRxBytesMobile(Context context) { NetworkStats.Bucket bucket; try { bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_MOBILE, getSubscriberId(context, ConnectivityManager.TYPE_MOBILE), 0, System.currentTimeMillis()); } catch (RemoteException e) { return -1; } return bucket.getRxBytes(); } //Here Manifest.permission.READ_PHONE_STATS is needed private String getSubscriberId(Context context, int networkType) { if (ConnectivityManager.TYPE_MOBILE == networkType) { TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); return tm.getSubscriberId(); } return ""; } 

      ANWENDUNG:

      Um die Daten für die jeweilige Anwendung zu erhalten, lesen Sie bitte die Dokumentation für queryDetailsForUID .

      Um die Paketnutzung für WiFi zu bekommen :

       NetworkStats networkStats = null; try { networkStats = networkStatsManager.queryDetailsForUid( ConnectivityManager.TYPE_WIFI, "", 0, System.currentTimeMillis(), packageUid); } catch (RemoteException e) { return -1; } NetworkStats.Bucket bucket = new NetworkStats.Bucket(); networkStats.getNextBucket(bucket); 

      Um die Paketnutzung für Mobile zu erhalten :

       Unfortunalety NetworkStats networkStats = null; try { networkStats = networkStatsManager.queryDetailsForUid( ConnectivityManager.TYPE_MOBILE, getSubscriberId(context, ConnectivityManager.TYPE_MOBILE), 0, System.currentTimeMillis(), packageUid); } catch (RemoteException e) { return -1; } NetworkStats.Bucket bucket = new NetworkStats.Bucket(); networkStats.getNextBucket(bucket); 

      Unglücklichkeit, nach diesem Stück Code , der Statistiken erhält, ist nur für ConnectivityManager.TYPE_MOBILE und ConnectivityManager.TYPE_WIFI .

    Eine Probe gemacht Github Repo Demostrierung der Nutzung.

    Es gibt auch einen komplizierten Weg, um Statistiken zu bekommen, aber das sollte für alle Adapter funktionieren: (aber es ist teuer, weil man Dateien ständig lesen muss)

    1. Hier sehen Sie alle Ihre Adapter und die gesendeten / empfangenen Daten:
     cat /proc/net/dev 
    1. Sie können Statistiken pro Adapter aus diesen Dateien erhalten:
     cat /sys/class/net/**wlan0**/statistics/**rx**_bytes 

    Wlan0 könnte alle deine Adapter sein, aber du musst den Wert in deiner App beibehalten, denn wenn du den Adapter ausschaltet, wird der Wert wieder 0 sein. (Sie können RX- und TX-Werte haben)

    1. Sie können die aktive, aktuell sendende / empfangende App-Liste erhalten
     cat /proc/net/**tcp6** 

    Dies kann auch mit tcp , tcp6 , upd , upd6 erfolgen

    Hier hast du die "uid" -Spalte, die die UID deiner installierten Apps ist. (So, dass App das Netzwerk jetzt benutzt)

    Aus dieser Datei sehen Sie auch den Endpunkt der Verbindung.

    1. Überprüfen Sie gesendeten / empfangenen Bytes pro Anwendung (wie die TrafficStats API-Aufrufe)
     cat /proc/uid_stat/**10348**/tcp_snd 

    Die ID hier ist die Applikation UID. Du hast die gesendet: tcp_snd und die empfangenen: tcp_rcv Dateien auch.

    1. Sie können auch einige Prozess-und UID-Matching mit:
     cat /proc/**17621**/status 

    Die ID hier ist die Prozess-ID, was man aus zB dem Top- Befehl bekommen kann. In der Statusdatei hast du die UID, die installierte / System App UID.

    +1 Sie können auch auf diese Datei schauen, TrafficStats API verwendet dies:

     cat /proc/net/xt_qtaguid/stats 

    Header:

     idx iface acct_tag_hex uid_tag_int cnt_set rx_bytes rx_packets tx_bytes tx_packets rx_tcp_bytes rx_tcp_packets rx_udp_bytes rx_udp_packets rx_other_bytes rx_other_packets tx_tcp_bytes tx_tcp_packets tx_udp_bytes tx_udp_packets tx_other_bytes tx_other_packets 

    Werte:

     6 eth0 0x0 10005 0 0 0 80 2 0 0 0 0 0 0 80 2 0 0 0 0 7 eth0 0x0 10005 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 eth0 0x0 10007 0 11133 25 4751 24 11133 25 0 0 0 0 4751 24 0 0 0 0 9 eth0 0x0 10007 1 5965514 4358 102028 2327 5965514 4358 0 0 0 0 102028 2327 0 0 0 0 10 eth0 0x0 10014 0 95 1 40 1 95 1 0 0 0 0 40 1 0 0 0 0 

    Vielleicht mischen die erste Antwort mit diesem Wissen, können Sie mehr und bessere Statistiken haben.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.