我写了一个简单的安卓应用程序,向服务器发送Http请求,接收响应,并计算传输和接收的字节数。 代码如下:
long receivedBytes = TrafficStats.getUidRxBytes(uid)-lastNumer
我发现receivedBytes始终比http Header和http Body的大小大,例如,在服务器中使用wireshark捕获的实际http帧的大小为1645字节(header+body),但是Android API返回receivedBytes为1912,传输也是如此。
TrafficStats getUidRxBytes本身就不准确(也许这个问题只针对我的平台三星i9300与cynogenmod 10.3有关)。
最后,我发现了正确的计算数据使用量的方法,发现这种方法似乎比TrafficStats API更准确。(非常感谢这里)
private long[] getStat() {
String line, line2;
long[] stats = new long[2];
try {
File fileSnd = new File("/proc/uid_stat/"+uid+"/tcp_snd");
File fileRcv = new File ("/proc/uid_stat/"+uid+"/tcp_rcv");
BufferedReader br1 = new BufferedReader(new FileReader(fileSnd));
BufferedReader br2 = new BufferedReader(new FileReader(fileRcv));
while ((line = br1.readLine()) != null&& (line2 = br2.readLine()) != null) {
stats[0] = Long.parseLong(line);
stats[1] = Long.parseLong(line2);
}
br1.close();
br2.close();
} catch (Exception e) {
e.printStackTrace();
}
return stats;
}