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

 

更多相关文章

  1. [Android] 利用Handler实现定时器功能
  2. Android中定时器的3种实现方法
  3. android 定时器(Handler Timer Thread AlarmManager CountDownTi
  4. android 定时器,每秒变换一次图片!
  5. Android 设置合理的定时器隔一段时间执行某段程序
  6. android定时器
  7. android下的定时器在关闭屏幕后会自己停掉解决方法

随机推荐

  1. android6.0源码分析之AndroidRuntime的建
  2. android WebView总结
  3. Android(安卓)众多的布局属性详解
  4. 【Android布局】在程序中设置android:gra
  5. 【Gradle】Android(安卓)Gradle 插件
  6. Android入门教程(二十七)------之Style与
  7. Android程序实现全屏代码
  8. Android知识积累
  9. android:shape的使用
  10. The connection to adb is down, and a s