Android中获取实时网速(2)

2023-03-18,,

一、实现思路: 
1、Android提供有获取当前总流量的方法 
2、上一秒 减去 下一面的流量差便是网速 
3、注意计算 
二、计算网速的工具类:

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);//更新界面
}
}

  三、使用:

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();
}

  参考于:https://blog.csdn.net/xueshao110/article/details/82766390

//-------------------------------------------------------

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()方法即可 实现

参考:https://www.jianshu.com/p/377ffb0f24ad

//----------------------------------------------------------------

https://www.csdn.net/gather_27/MtTakg1sNzQ3MC1ibG9n.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);//更新界面

     

    }

     

    }

Android中获取实时网速(2)的相关教程结束。

《Android中获取实时网速(2).doc》

下载本文的Word格式文档,以方便收藏与打印。