首先瞭解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