对于android 2.2以上的API中,已有了官方统计类:
TrafficStats.getMobileTxBytes(); //GPRS上行流量
TrafficStats.getMobileRxBytes(); //GPRS下行流量
TrafficStats.getTotalTxBytes() ; //总上行流量 含wifi
TrafficStats.getTotalRxBytes(); //总下行流量 含wifi
TrafficStats.getUidTxBytes(uid); //某一uid上行流量 (该数据不准确,包含网络数据(gprs、wifi)及本地进程间套接字通信数据
TrafficStats.getUidRxBytes(uid); //某一uid下行流量 (该数据不准确,包含网络数据(gprs、wifi)及本地进程间套接字通信数据
对于2.2以下的系统中,可通过分析系统文件 /proc/uid_stat/" + appUID + "/tcp_rcv" 及/proc/uid_stat/" + appUID + "/tcp_snd"来获取某一应用的数据 ( 同样不准确。API中的app流量即从此文件获取) 对于共享同一UID的应用来说,不能区分到底是哪个应用的流量有多少
总流量可以通过"/proc/self/net/dev"文件获取 里面包含wifi网卡及gprs网卡通过的流量数据及数据包数量
只有已root的手机中才能从文件中读取数据, 关机后数据均会清空 未使用流量的app不存在 /proc/uid_stat/" + appUID + "/tcp_rcv" 及/proc/uid_stat/" + appUID + "/tcp_snd"文件