有没有办法统计Android中通过WiFi / LAN消耗和传输的数据?我可以通过TrafficStats
方法getMobileTxBytes()
和getMobileRxBytes()
查看移动互联网(3G,4G)的统计信息,但是WiFi怎么样?
答案 0 :(得分:1)
更新:下面的原始答案很可能是错误。我为WiFi / LAN获得的数字太高了。仍然没有想到为什么(似乎无法通过WiFi / LAN测量流量),但一个老问题提供了一些见解:How to get the correct number of bytes sent and received in TrafficStats?
找到我自己的答案。
首先,定义一个名为getNetworkInterface()的方法。我不知道究竟是什么“网络接口”,但我们需要它返回的String标记来构建包含字节数的文件的路径。
private String getNetworkInterface() {
String wifiInterface = null;
try {
Class<?> system = Class.forName("android.os.SystemProperties");
Method getter = system.getMethod("get", String.class);
wifiInterface = (String) getter.invoke(null, "wifi.interface");
} catch (Exception e) {
e.printStackTrace();
}
if (wifiInterface == null || wifiInterface.length() == 0) {
wifiInterface = "eth0";
}
return wifiInterface;
}
接下来,定义readLongFromFile()。我们实际上有两个文件路径 - 一个用于发送的字节,一个用于接收的字节。此方法只是封装读取提供给它的文件路径,并将计数作为long返回。
private long readLongFromFile(String filename) {
RandomAccessFile f = null;
try {
f = new RandomAccessFile(filename, "r");
String contents = f.readLine();
if (contents != null && contents.length() > 0) {
return Long.parseLong(contents);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (f != null) try { f.close(); } catch (Exception e) { e.printStackTrace(); }
}
return TrafficStats.UNSUPPORTED;
}
最后,构建返回通过WiFi / LAN发送和接收的字节数的方法。
private long getNetworkTxBytes() {
String txFile = "sys/class/net/" + this.getNetworkInterface() + "/statistics/tx_bytes";
return readLongFromFile(txFile);
}
private long getNetworkRxBytes() {
String rxFile = "sys/class/net/" + this.getNetworkInterface() + "/statistics/rx_bytes";
return readLongFromFile(rxFile);
}
现在,我们可以通过上面的移动互联网示例来测试我们的方法。
long received = this.getNetworkRxBytes();
long sent = this.getNetworkTxBytes();
if (received == TrafficStats.UNSUPPORTED) {
Log.d("test", "TrafficStats is not supported in this device.");
} else {
Log.d("test", "bytes received via WiFi/LAN: " + received);
Log.d("test", "bytes sent via WiFi/LAN: " + sent);
}
击> <击> 撞击>
答案 1 :(得分:1)
(这实际上是对你的答案的评论,没有足够的分数来真正评论,但......)
TrafficStats.UNSUPPORTED
并不一定意味着设备不支持读取WiFi流量统计信息。在我的三星Galaxy S2的情况下,当WiFi被禁用时,包含统计数据的文件不存在,但是当启用WiFi时它可以工作。