2013-07-16 16 views
13

Ab Android 4.0 haben wir Optionen zur Steuerung der Datennutzung im Telefon. Bitte überprüfen Sie den beigefügten Screenshot für ein besseres Verständnis.Wie zeige ich programmatisch die Datennutzung aller Anwendungen an?

http://developer.android.com/about/versions/android-4.0-highlights.html

Jetzt habe ich eine gewisse Anforderung, diese Dinge zu überprüfen (alle Daten Nutzung der Anwendung in bestimmten Zeitraum/spezifische Tage) von meiner Anwendung. Wie kann ich das erreichen? Ich verwende auch die folgende Klasse für Details zur Netzwerknutzung.

http://developer.oesf.biz/em/developer/reference/eggplant/android/net/NetworkStatsHistory.html

Überprüfen Sie bitte die untenstehenden Link Bilder. Ich muss die gleiche Art von Anwendung entwickeln.

Vielen Dank für Ihre Code-Sharing, aber ich brauche Daten von jeder Anwendung verwendet wissen anstelle aller Anwendungen. Bisher habe ich in den Links niemand über die Datennutzung einzelner Anwendungen gesprochen. Ich kann bereits installierte Anwendungen im Gerät anzeigen. Jetzt möchte ich wissen, welche Daten von jeder einzelnen Anwendung verwendet werden.

Ich verwende den folgenden Code für die Liste der installierten Anwendungen im Gerät.

private ArrayList<PInfo> getInstalledApps(boolean getSysPackages) { 
    ArrayList<PInfo> res = new ArrayList<PInfo>(); 

    List<PackageInfo> packs = getPackageManager().getInstalledPackages(0); 

    for (int i=0; i<packs.size(); i++) { 
     PackageInfo p = packs.get(i); 
     if ((!getSysPackages) && (p.versionName == null)) { 
      continue ; 
     } 
     PInfo newInfo = new PInfo(); 
     newInfo.setAppname(p.applicationInfo.loadLabel(getPackageManager()).toString()); 
     newInfo.setPname(p.packageName); 
     newInfo.setVersionName(p.versionName); 
     newInfo.setVersionCode(p.versionCode); 
     newInfo.setIcon(p.applicationInfo.loadIcon(getPackageManager())); 

     res.add(newInfo); 
    } 
    return res; 
} 

Woher weiß ich, welche Daten von den einzelnen Anwendungen verwendet werden?

Eigentlich brauche ich eine Lösung, die Datennutzung von Anwendungen in einem bestimmten Zeitraum gibt, d. H. Zwischen zwei Tagen.

+0

Bitte erklären Sie ** vollständig und genau **, was "diese Dinge" sind, die Sie von Ihrer Anwendung "überprüfen" müssen. – CommonsWare

+0

Hallo CommonsWare Ich habe meinen Beitrag aktualisiert. Kannst du es jetzt überprüfen? –

+0

hast du die richtige Antwort für deine Frage bekommen oder hast du deine Anforderung erfolgreich umgesetzt? Wenn ja bitte teilen Sie die Lösung, ich suche auch danach. –

Antwort

4

Sie können die android.net.TrafficStats verwenden, um Details zur Netzwerknutzung abzurufen.

Finden Sie ein Beispielprogramm für das gleiche.

package com.anchit.trafficstatus; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 

public class TrafficStatus extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     Log.e("bytes recvd", "" + android.net.TrafficStats.getMobileRxBytes()); 

     Log.e("Total", "Bytes received" + android.net.TrafficStats.getTotalRxBytes()); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 
} 
+0

@kiran_b Sie können auch UIDs verwandte Methoden in TrafficStats Klasse –

+0

verwenden Vielen Dank für die Freigabe Ihres Codes, aber ich muss die Daten von jeder Anwendung anstelle von allen Anwendungen verwendet –

+1

@Kiran_b Sehr geehrte, deshalb habe ich erwähnt, dass Sie für eine gehen müssen API der TrafficStats-Klasse, um sich über UIDs zu informieren. Diese können prozessspezifisch sein und Ihnen Details für jeden Prozess liefern. Bitte folgen Sie dem unten angegebenen Link von stackoverflow http: // stackoverflow.com/questions/11939939/android-wie-kann-ich-finde-die-daten-verwendung-auf-pro-anwendungs-basis –

9

Zunächst erhalten eine Liste aller Prozess info laufenden Anwendungen:

List<RunningAppProcessInfo> 

dann die UID jeder App bekommen und erhalten dann senden und Verkehr der App erhalten:

// Get running processes 
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
List<RunningAppProcessInfo> runningApps = manager.getRunningAppProcesses(); 

for (RunningAppProcessInfo runningApp : runningApps) { 

    // Get UID of the selected process 
    int uid = ((RunningAppProcessInfo)getListAdapter().getItem(position)).uid; 

    // Get traffic data 
    long received = TrafficStats.getUidRxBytes(uid); 
    long send = TrafficStats.getUidTxBytes(uid); 
    Log.v("" + uid , "Send :" + send + ", Received :" + received); 
} 
+1

Wie kann es modifiziert werden, um nur Daten Rx/Tx heute abzufragen? –

+0

@ShashankKumar haben Sie die Lösung, Daten am Tag zu bekommen .. :) –

+0

@NarenderReddy: Nein, muss einen Dienst im Hintergrund/NetworkChangeReceiver ausführen, um die Nutzung durch Subtraktion von vorherigen Wert für jede App zu berechnen. –

Verwandte Themen