由于自己手机每月只有100M流量 最近总是不够用 所以 想研究一下android的流量统计 这样的话就能随时了解自己使用流量的记录
之初也咨询了一些朋友 发现研究这方面的人比较少
在网上也搜罗到一些资料 最基本的都是这些
TrafficStats类
其中的重要方法有如下:
01 | static long getMobileRxBytes() //获取通过Mobile连接收到的字节总数,不包含WiFi |
02 | static long getMobileRxPackets() //获取Mobile连接收到的数据包总数 |
03 | static long getMobileTxBytes() //Mobile发送的总字节数 |
04 | static long getMobileTxPackets() //Mobile发送的总数据包数 |
05 | static long getTotalRxBytes() //获取总的接受字节数,包含Mobile和WiFi等 |
06 | static long getTotalRxPackets() //总的接受数据包数,包含Mobile和WiFi等 |
07 | static long getTotalTxBytes() //总的发送字节数,包含Mobile和WiFi等 |
08 | static long getTotalTxPackets() //发送的总数据包数,包含Mobile和WiFi等 |
09 | static long getUidRxBytes( int uid) //获取某个网络UID的接受字节数 |
10 | static long getUidTxBytes( int uid) //获取某个网络UID的发送字节数 |
备注:TrafficStats类在Android 2.2 API Level(8)之后出现。
但是这些方法 获取到的流量数据都是从手机上次开机到当前的流量使用情况
所以需要准确记录流量数据 就必须监听手机的开机和关机
关机的时候 将数据都存储起来 下次开机后通过以上方法获取到的数据 在叠加上
但是 我发现在这些方法里 就缺少我最需要的那个方法
我想获取某个app接受和发送的 2G/3G流量 不包含wifi 但是这些方法里没有 看来 我需要另外寻找办法了
于是我又去咨询朋友 遇上一个前同事正好在研究这个。 算是帮上我大忙了。
他 给我的建议是 获取流量信息 可以去读取系统文件 /proc/net/dev
/proc/net/xt_qtaguid/stats 这个文件则包含了每个app使用数据的情况 这下算是找到办法了
stats文件大致是这样的
剩下的就是如何去读取这个文件了。
在网上搜了搜
用FileReader来读取文件
DEV_FILE = “/proc/net/xt_qtaguid/stats”
FileReader fstream = null;
try {
fstream = new FileReader(DEV_FILE);
} catch (FileNotFoundException e) {
DisplayToast("Could not read " + DEV_FILE);
}
BufferedReader in = new BufferedReader(fstream, 500);
这样再用while循环去读取in里每行的数据
上图中
这是表头 iface 则代表流量的类型 为rmnet就是2G/3G流量 wlan 是wifi流量
手机 打开wifi的时候 就只有wlan 打开数据的时候 就只有2G/3G
而流量的具体数据 就要获取rx_bytes 和 tx_bytes 这两个字段了
整个表 字段很多 其他的暂时没研究
读取这个文件的时候 我看网上 的办法也都是这样 循环读取每行数据 然后创建很多个数组去保存每行数据
然后 需要的数据 就从相应的数组里去取。
大致研究的结果就是这些
最近因为工作比较忙 就没有继续研究下去了