稍微整理了下,直接上代码。
private long lastTotalRxBytes = 0;
private long lastTimeStamp = 0;private int UPDATE = 100;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO 接收消息并且去更新UI线程上的控件内容
if (msg.what == UPDATE) {
//tv.setText(String.valueOf(msg.obj));
Log.i(TAG, "网速为:"+msg.obj);
}
super.handleMessage(msg);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_net_speed);
lastTotalRxBytes = getTotalRxBytes();
lastTimeStamp = System.currentTimeMillis();
Log.i(TAG, "lastTotalRxBytes:"+lastTotalRxBytes);
Log.i(TAG, "lastTimeStamp:"+lastTimeStamp);
TimerTask task = new TimerTask() {
@Override
public void run() {
showNetSpeed();
}
};
new Timer().schedule(task, 1000, 2000); // 1s后启动任务,每2s执行一次
}
private void showNetSpeed() {
long nowTotalRxBytes = getTotalRxBytes();
long nowTimeStamp = System.currentTimeMillis();
long speed = ((nowTotalRxBytes - lastTotalRxBytes) * 1000 / (nowTimeStamp - lastTimeStamp));//毫秒转换
lastTimeStamp = nowTimeStamp;
lastTotalRxBytes = nowTotalRxBytes;
Message msg = mHandler.obtainMessage();
msg.what = UPDATE;
if(speed == 0){
msg.obj = String.valueOf(speed) + ".00kb/s";
}else {
msg.obj = String.valueOf(speed) + "kb/s";
}
mHandler.sendMessage(msg);//更新界面
}
private long getTotalRxBytes() {
// return TrafficStats.getUidRxBytes(getApplicationInfo().uid) == TrafficStats.UNSUPPORTED ? 0 :(TrafficStats.getTotalRxBytes()/1024);//转为KB
return TrafficStats.getTotalRxBytes()/1024;//转为KB
}