显示手机或者应用的实时网速,很多应用都有这块的内容,那么如何获取手机或者应用的实时网速呢?
获取网速的原理是一段时间只能的数据总量除以这段时间,这就是网速了。
获取某一时刻手机的数据总量:
// 得到整个手机的流量值 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 }