2015-02-11 63 views
0

嗨我想通過使用下面的代碼獲取每個Android應用程序的使用情況。交通統計重啓啓動

PackageManager packageManager = getActivity().getPackageManager(); 
    List<PackageInfo> applist = packageManager.getInstalledPackages(0); 
    Iterator<PackageInfo> it = applist.iterator(); 

    while (it.hasNext()) { 
     PackageInfo pk = (PackageInfo) it.next(); 
     if (pk.versionName == null) { 
      continue ; 
     } 
     double received = (double) TrafficStats.getUidRxBytes(pk.applicationInfo.uid) 

       /(1024 * 1024); 
     double send = (double) TrafficStats.getUidTxBytes(pk.applicationInfo.uid) 
       /(1024 * 1024); 
     double total = received + send; 
     textview.setText(pk.applicationInfo.loadLabel(
            getActivity().getPackageManager()) 
            .toString() + " " +String.format("%.2f", total)+" MB"); 
    } 

但是,如果設備重新啓動,那麼值將被刪除。但在設備中,如果你去Android設置 - >數據使用 - >使用仍然存在。我的問題是

從哪裏讀取每個應用程序的數據使用情況。 ?

代碼解釋很有幫助。謝謝。

+0

您是否找到了解決此問題的方法 – Javanator 2015-03-16 14:28:48

+0

我沒有找到任何:( – Madhukar 2015-04-06 08:28:25

回答

0

TrafficStats.getUidRxBytes(int)將僅返回設備啓動時的數據使用情況。爲什麼不嘗試將流量數據寫入文件,以便在啓動後可用?您可以構建START_REDELIVER_INTENT服務以在後臺運行

+0

UID對於應用程序不是永久性的,如果它不是最活躍的,它將被系統更改;任何其他算法都是在android中完成的,但是如果您看到nexus或任何4.4.4 +設備的使用情況,您甚至可以在過去幾個月內獲得每個應用的所有數據使用情況。 – Madhukar 2015-04-06 08:32:08

+0

@Fabin Paul如何在每天啓動後獲取保存的數據。 – 2016-06-02 15:44:45