Android中获取实时网速(2)
16lz
2021-01-24
一、实现思路:
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
更多相关文章
- 【简单的学生管理界面】Android添加简单的日历控件
- 解决webview中输入框完成输入隐藏键盘后滑动界面又弹出软键盘问
- Android中使用OrmLite来对SQLite数据库进行CRUD(增删改查)解析
- android使用activitygroup和Scrollview的方法
- TCPDUMP抓取android手机流量包+wireshark分析
- Android(安卓)SlidingMenu实现沉浸式状态栏
- ActivityGroup返回键获取焦点处理
- android退出登陆后,清空之前所有的activity,进入登陆主界面
- Android(安卓)调用系统相册选择照片与调用系统相机拍照保存照片