Android中获取实时网速(2)
一、实现思路:
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