需求: 統計Wifi/2G/3G/4G流量各多少
Issue:
一. 怎麼判斷2G/3G/4G
系統源碼TelephonyManager類裡提供了方法,只是隱藏了,所以可以參源碼
二.怎麼統計
Android 2.2後提供TrafficStats類,用來進行流量統計,具體使用參考手冊
這裡我用到了
static long getTotalRxBytes() //擷取總的接受位元組數,包含Mobile和WiFi等
static long getTotalTxBytes() //總的發送位元組數,包含Mobile和WiFi等
三.注意事項
1. android.net.conn.CONNECTIVITY_CHANGE廣播,當行動電話通訊類型切換的時候,系統會發送此廣播
2. TrafficStats.getTotalRxBytes()和TrafficStats.getTotalTxBytes()方法擷取的值是從開機開始記錄的
實現方法:
1. 建立TrafficData table, 欄位 trafficData(網路變化使用了多少流量), subtype(網路類型), starttime(開始時間), endtime(結束時間)
2. 建立Sharedpreferences, 記錄lastSystemTraffic(上次系統的流量大小),subtype(網路類型),startTime
3. 註冊DataTrafficReceiver.監聽 android.net.conn.CONNECTIVITY_CHANGE廣播和關機廣播,當網路變化的時候,擷取
currentTraffic=TrafficStats.getTotalRxBytes()+TrafficStats.getTotalTxBytes(), 讀取儲存在SP中的lastSystemTraffic.
上次網路使用流量 durationTraffic=currentTraffic-lastSystemTraffic. 將durationTraffic儲存到資料裡
並更新SP裡的值
4. 手機重啟時,重複3步驟,並清空SP裡的值