2013-07-16 19 views
13

Android 4.0 sürümünde, telefondaki veri kullanım kontrol seçeneklerine sahibiz. Daha fazla bilgi için lütfen ekli ekran görüntüsünü kontrol edin.Tüm uygulamaların veri kullanımını programlı olarak nasıl gösteririm?

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

Şimdi benim uygulamadan bunları (belirli bir zaman dilimi içinde tüm Uygulamanın Veri kullanımı/spesifik gün) kontrol etmek için bazı gereksinim var. Bunu nasıl başarabilirim? Ağ Kullanımı ayrıntıları için aşağıdaki sınıfı da kullanıyorum.

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

aşağıdaki bağlantıyı görüntüleri kontrol edin. Aynı tür bir uygulamayı geliştirmem gerekiyor.

kodunuzu paylaştığınız için teşekkür ederiz

http://developer.android.com/sdk/images/4.0/usage-all-lg.png

  • , ama bunun yerine tüm uygulamaların her uygulama tarafından kullanılan verileri bilmemiz gerekir. Şimdiye kadar hiç kimse bireysel uygulamaların veri kullanımı hakkında konuştuğu bağlantılarda gözlemledim. Cihazda yüklü uygulamaları nasıl göstereceğimi zaten biliyorum. Şimdi her uygulamada kullanılan verilerin ne olduğunu bilmek istiyorum.

    Aygıtta yüklü uygulamaların listesi için aşağıdaki kodu kullanıyorum.

    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; 
    } 
    

    Her uygulamada kullanılan verilerin hangileri olduğunu nasıl bilebilirim? Aslında, belirli bir zaman periyodunda, yani iki gün arasında uygulamaların veri kullanımını sağlayan bir çözüme ihtiyacım var.

  • +0

    Lütfen ** 'yi tamamen ve kesin bir şekilde ** açıklayınız. Bu "uygulamaların", uygulamanızdan "kontrol" etmeniz gereken şey. – CommonsWare

    +0

    merhaba CommonsWare i güncellememi şimdi gönderebilir –

    +0

    Sorunuz için doğru cevabı aldınız mı veya gereksinimlerinizi başarıyla uyguladınız mı? eğer evet lütfen çözümü paylaşın, ben de arıyorum. –

    cevap

    4

    Ağ kullanım ayrıntılarını almak için android.net.TrafficStats'u kullanabilirsiniz.

    Aşağıda bunun için bir örnek program bulabilirsiniz.

    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 Ayrıca TrafficStats sınıf –

    +0

    kullanılabilir ilgili yöntemlerini kullanabilirsiniz Kodu paylaştığınız için teşekkür ederiz ama tüm uygulamalar yerine her uygulama tarafından kullanılan verileri bilmem gerekiyor –

    +1

    @Kiran_b Sevgili, bu yüzden bir UID'ler hakkında bilgi edinmek için TrafficStats sınıfı API'sı. Bunlar, her işlem için ayrıntıları alabilen belirli bir süreç olabilir. lütfen aşağıda belirtilen stackoverflow bağlantısını izleyin: http: // stackoverflow.com/questions/11939939/android-nasıl-can-i-bulmak-veri-kullanım-başına-uygulama bazında –

    9

    Öncelikle, tüm çalışan uygulamalarınızın süreç bilgi listesini almak:

    List<RunningAppProcessInfo> 
    

    Sonra her uygulamanın UID almak ve göndermek ve uygulamanın trafik almak olsun:

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

    Bugün sadece Rx/Tx verilerini sorgulamak için nasıl değiştirilir? –

    +0

    @ShashankKumar, gün içinde veri elde etmek için bir çözüm var .. :) –

    +0

    @NarenderReddy: Hayır, her uygulama için önceki değerden çıkartarak kullanımı hesaplamak için arka planda/NetworkChangeReceiver içinde bir servis çalıştırmak zorunda. –

    İlgili konular