android 实时获取网速
16lz
2021-01-23
public class NetSpeed { private static final String TAG = NetSpeed.class.getSimpleName(); private long lastTotalRxBytes = 0; private long lastTimeStamp = 0; public String getNetSpeed(int uid) { long nowTotalRxBytes = getTotalRxBytes(uid); long nowTimeStamp = System.currentTimeMillis(); long speed = ((nowTotalRxBytes - lastTotalRxBytes) * 1000 / (nowTimeStamp - lastTimeStamp));//毫秒转换 lastTimeStamp = nowTimeStamp; lastTotalRxBytes = nowTotalRxBytes; return String.valueOf(speed) + " kb/s"; } //getApplicationInfo().uid public long getTotalRxBytes(int uid) { return TrafficStats.getUidRxBytes(uid) == TrafficStats.UNSUPPORTED ? 0 : (TrafficStats.getTotalRxBytes() / 1024);//转为KB }
public class NetSpeedTimer { private long defaultDelay = 1000; private long defaultPeriod = 1000; private static final int ERROR_CODE = -101011010; private int mMsgWhat = ERROR_CODE; private NetSpeed mNetSpeed; private Handler mHandler; private Context mContext; private SpeedTimerTask mSpeedTimerTask; public static final int NET_SPEED_TIMER_DEFAULT = 101010; public NetSpeedTimer(Context context, NetSpeed netSpeed, Handler handler) { this.mContext = context; this.mNetSpeed = netSpeed; this.mHandler = handler; } public NetSpeedTimer setDelayTime(long delay) { this.defaultDelay = delay; return this; } public NetSpeedTimer setPeriodTime(long period) { this.defaultPeriod = period; return this; } public NetSpeedTimer setHanderWhat(int what) { this.mMsgWhat = what; return this; } /** * 开启获取网速定时器 */ public void startSpeedTimer() { Timer timer = new Timer(); mSpeedTimerTask = new SpeedTimerTask(mContext, mNetSpeed, mHandler, mMsgWhat); timer.schedule(mSpeedTimerTask, defaultDelay, defaultPeriod); } /** * 关闭定时器 */ public void stopSpeedTimer() { if (null != mSpeedTimerTask) { mSpeedTimerTask.cancel(); } } /** * @author * 静态内部类 */ private static class SpeedTimerTask extends TimerTask { private int mMsgWhat; private NetSpeed mNetSpeed; private Handler mHandler; private Context mContext; public SpeedTimerTask(Context context, NetSpeed netSpeed, Handler handler, int what) { this.mContext = context; this.mHandler = handler; this.mNetSpeed = netSpeed; this.mMsgWhat = what; } @Override public void run() { // TODO Auto-generated method stub if (null != mNetSpeed && null != mHandler) { Message obtainMessage = mHandler.obtainMessage(); if (mMsgWhat != ERROR_CODE) { obtainMessage.what = mMsgWhat; } else { obtainMessage.what = NET_SPEED_TIMER_DEFAULT; } obtainMessage.obj = mNetSpeed.getNetSpeed(mContext .getApplicationInfo().uid); mHandler.sendMessage(obtainMessage); } } }}
调用:
private void initNewWork() { //创建NetSpeedTimer实例 mNetSpeedTimer = new NetSpeedTimer(mContext, new NetSpeed(), mHandler).setDelayTime(1000).setPeriodTime(2000); //在想要开始执行的地方调用该段代码 mNetSpeedTimer.startSpeedTimer(); } private Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == NetSpeedTimer.NET_SPEED_TIMER_DEFAULT){ String speed = (String) msg.obj; //打印你所需要的网速值,单位默认为kb/s Log.i(TAG, "current net speed = " + speed); } } };
更多相关文章
- [Android] 利用Handler实现定时器功能
- Android中定时器的3种实现方法
- android 定时器(Handler Timer Thread AlarmManager CountDownTi
- android 定时器,每秒变换一次图片!
- Android 设置合理的定时器隔一段时间执行某段程序
- android定时器
- android下的定时器在关闭屏幕后会自己停掉解决方法