显示手机或者应用的实时网速,很多应用都有这块的内容,那么如何获取手机或者应用的实时网速呢?
获取网速的原理是一段时间只能的数据总量除以这段时间,这就是网速了。
获取某一时刻手机的数据总量:
// 得到整个手机的流量值
return TrafficStats.getUidRxBytes(getApplicationInfo().uid) == TrafficStats.UNSUPPORTED ? 0
: (TrafficStats.getTotalRxBytes() / 1024);// 转为KB
获取某一时刻应用的数据总量:
// 得到当前应用的流量值
return TrafficStats.getUidRxBytes(getApplicationInfo().uid) == TrafficStats.UNSUPPORTED ? 0 : (TrafficStats
.getUidRxBytes(getApplicationInfo().uid) / 1024);// 转为KB
现在知道如何获取某一时刻的数据总量,我们就能轻而易举的得到网速了:
private long lastTotalRxBytes = 0; // 最后缓存的字节数
private long lastTimeStamp = 0; // 当前缓存时间
// 循环查询当前网速
private Runnable runnable = new Runnable() {
@Override
public void run() {
long nowTotalRxBytes = getTotalRxBytes(); // 获取当前数据总量
long nowTimeStamp = System.currentTimeMillis(); // 当前时间
// kb/s
long speed = ((nowTotalRxBytes - lastTotalRxBytes) * 1000 / (nowTimeStamp == lastTimeStamp ? nowTimeStamp : nowTimeStamp
- lastTimeStamp));// 毫秒转换
tv.setText(String.valueOf(speed) + "kb/s");
lastTimeStamp = nowTimeStamp;
lastTotalRxBytes = nowTotalRxBytes;
handler.postDelayed(runnable, 1000);// 每1秒执行一次runnable.
}
};
private long getTotalRxBytes() {
// 得到整个手机的流量值
return TrafficStats.getUidRxBytes(getApplicationInfo().uid) == TrafficStats.UNSUPPORTED ? 0
: (TrafficStats.getTotalRxBytes() / 1024);// 转为KB
// // 得到当前应用的流量值
// return TrafficStats.getUidRxBytes(getApplicationInfo().uid) ==
// TrafficStats.UNSUPPORTED ? 0 : (TrafficStats
// .getUidRxBytes(getApplicationInfo().uid) / 1024);// 转为KB
}