1、实现思路:
一、Android提供有获取当前总流量的方法
二、上一秒 减去 下一面的流量差即是网速
三、注意计算
2、计算网速的工具类:html
package imcs.cb.com.viewapplication.utils;
import android.content.Context;
import android.net.TrafficStats;
import android.os.Handler;
import android.os.Message;
import java.util.Timer;
import java.util.TimerTask;
/**
* Created by Ricky on 2016/10/13.
*/
public class NetWorkSpeedUtils {
private Context context;
private Handler mHandler;
private long lastTotalRxBytes = 0;
private long lastTimeStamp = 0;
public NetWorkSpeedUtils(Context context, Handler mHandler){
this.context = context;
this.mHandler = mHandler;
}
TimerTask task = new TimerTask() {
@Override
public void run() {
showNetSpeed();
}
};
public void startShowNetSpeed(){
lastTotalRxBytes = getTotalRxBytes();
lastTimeStamp = System.currentTimeMillis();
new Timer().schedule(task, 1000, 1000); // 1s后启动任务,每2s执行一次
}
private long getTotalRxBytes() {
return TrafficStats.getUidRxBytes(context.getApplicationInfo().uid) == TrafficStats.UNSUPPORTED ? 0 :(TrafficStats.getTotalRxBytes()/1024);//转为KB
}
private void showNetSpeed() {
long nowTotalRxBytes = getTotalRxBytes();
long nowTimeStamp = System.currentTimeMillis();
long speed = ((nowTotalRxBytes - lastTotalRxBytes) * 1000 / (nowTimeStamp - lastTimeStamp));//毫秒转换
long speed2 = ((nowTotalRxBytes - lastTotalRxBytes) * 1000 % (nowTimeStamp - lastTimeStamp));//毫秒转换
lastTimeStamp = nowTimeStamp;
lastTotalRxBytes = nowTotalRxBytes;
Message msg = mHandler.obtainMessage();
msg.what = 100;
msg.obj = String.valueOf(speed) + "." + String.valueOf(speed2) + " kb/s";
mHandler.sendMessage(msg);//更新界面
}
}
3、使用:java
private Handler mHnadler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 100:
tv_speed.setText("当前网速: " + msg.obj.toString());
break;
}
super.handleMessage(msg);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_speed = (TextView) findViewById(R.id.tv_speed);
new NetWorkSpeedUtils(this,mHnadler).startShowNetSpeed();
}
//-------------------------------------------------------app
private long rxtxTotal =0;
private DecimalFormat showFloatFormat =new DecimalFormat("0.00");
public void updateViewData() {
long tempSum = TrafficStats.getTotalRxBytes()
+ TrafficStats.getTotalTxBytes();
long rxtxLast = tempSum -rxtxTotal;
double totalSpeed= rxtxLast *1000 /2000d;
rxtxTotal = tempSum;
wangsu.setText("当前网速:" + showSpeed(totalSpeed)); //设置显示当前网速
}
private String showSpeed(double speed) {
String speedString;
if (speed >=1048576d) {
speedString =showFloatFormat.format(speed /1048576d) +"MB/s";
}else {
speedString =showFloatFormat.format(speed /1024d) +"KB/s";
}
return speedString;
}
做者:一曲烟雨伊人醉
连接:https://www.jianshu.com/p/377ffb0f24ad
来源:简书
简书著做权归做者全部,任何形式的转载都请联系做者得到受权并注明出处。
而后开启计时器 轮询访问updateViewData()方法便可 实现ide
//----------------------------------------------------------------ui
package imcs.cb.com.viewapplication.utils;
import android.content.Context;
import android.net.TrafficStats;
import android.os.Handler;
import android.os.Message;
import java.util.Timer;
import java.util.TimerTask;
/**
* Created by Ricky on 2016/10/13.
*/
public
class NetWorkSpeedUtils{
private Context context;
private Handler mHandler;
private
long lastTotalRxBytes =
0;
private
long lastTimeStamp =
0;
public NetWorkSpeedUtils(Context context, Handler mHandler){
this.context = context;
this.mHandler = mHandler;
}
TimerTask task =
new TimerTask() {
@Override
public void run(){
showNetSpeed();
}
};
public void startShowNetSpeed(){
lastTotalRxBytes = getTotalRxBytes();
lastTimeStamp = System.currentTimeMillis();
new Timer().schedule(task,
1000,
1000);
// 1s后启动任务,每2s执行一次
}
private long getTotalRxBytes(){
return TrafficStats.getUidRxBytes(context.getApplicationInfo().uid) == TrafficStats.UNSUPPORTED ?
0 :(TrafficStats.getTotalRxBytes()/
1024);
//转为KB
}
private void showNetSpeed(){
long nowTotalRxBytes = getTotalRxBytes();
long nowTimeStamp = System.currentTimeMillis();
long speed = ((nowTotalRxBytes - lastTotalRxBytes) *
1000 / (nowTimeStamp - lastTimeStamp));
//毫秒转换
long speed2 = ((nowTotalRxBytes - lastTotalRxBytes) *
1000 % (nowTimeStamp - lastTimeStamp));
//毫秒转换
lastTimeStamp = nowTimeStamp;
lastTotalRxBytes = nowTotalRxBytes;
Message msg = mHandler.obtainMessage();
msg.what =
100;
msg.obj = String.valueOf(speed) +
"." + String.valueOf(speed2) +
" kb/s";
mHandler.sendMessage(msg);
//更新界面
}
}