android流量統計實現思路

首先瞭解android提供給流量統計的api

對於Android流量統計來說在2.2版中加入瞭TrafficStats類可以輕松獲取,其實本身TrafficStats類也是讀取 Linux提供的文件對象系統類型的文本進行解析。

有興趣的朋友可以讀讀這個類的源碼

android.net.TrafficStats類中,提供瞭多種靜態方法,可以直接調用獲取,返回類型均為long型,如果返回等於-1代表 UNSUPPORTED 當前設備不支持統計。
 
1. static long  getMobileRxBytes()  //獲取通過Mobile連接收到的字節總數,不包含WiFi  
2. static long  getMobileRxPackets()  //獲取Mobile連接收到的數據包總數,不包含WiFi  
3. static long  getMobileTxBytes()  //Mobile發送的總字節數  
4. static long  getMobileTxPackets()  //Mobile發送的總數據包數  
5. static long  getTotalRxBytes()  //獲取總的接受字節數,包含Mobile和WiFi等  
6. static long  getTotalRxPackets()  //總的接受數據包數,包含Mobile和WiFi等  
7. static long  getTotalTxBytes()  //總的發送字節數,包含Mobile和WiFi等  
8. static long  getTotalTxPackets()  //發送的總數據包數,包含Mobile和WiFi等  
9. static long  getUidRxBytes(int uid)  //獲取某個網絡UID的接受字節數  
10. static long  getUidTxBytes(int uid) //獲取某個網絡UID的發送字節數 
 
最後再次提醒,TrafficStats類工作在Android 2.2 API Level為8的固件上。如果想支持android8以下的系統請參考TrafficStats源碼
這些數據都是從這次開機開始,到查詢的時間的流量,關機之後將被清

如何去設計:
      因為每次開機都不一樣,所以要設置一個廣播接收器接收開機和關機的廣播,決定對流量的初始化工作和保存工作。當然在每次查看流量的時候也要做一次查詢和保存工作,把統計的數據保存到數據庫裡。

如何設計數據庫?
          一個數據表記錄:每次查詢的值,查詢的時間,網絡類型,網絡流量,是否為關機時保存的標志。
         每次查詢的總流量 = 當次流量 + 所有關機保存的流量, 還可以在程序啟動之後開啟一個服務,沒隔多長時間保存一次。還有在每天晚上12點(11:59分)的時候做一次保存工作。還有一次需要註意的是getUidRxBytes(int uid)隻能取到所有的數據,包括2g/3g和wifi

 

作者 dyllove98

發佈留言