java实时获取android网速_android 实时获取网速

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

}

}

};

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

if(null != mNetSpeedTimer){

mNetSpeedTimer.stopSpeedTimer();

}

super.onDestroy();

}

2.3开始android就提供来这个类的API,这样我们就可以方便的用他来实现统计手机流量来。这个类其实也很简单,贴上他的几个方法,大家一看就知道怎么用了。

static long getMobileRxBytes() //获取通过Mobile连接收到的字节总数,不包含WiFi

static long getMobileRxPackets() //获取Mobile连接收到的数据包总数

static long getMobileTxBytes() //Mobile发送的总字节数

static long getMobileTxPackets() //Mobile发送的总数据包数

static long getTotalRxBytes() //获取总的接受字节数,包含Mobile和WiFi等

static long getTotalRxPackets() //总的接受数据包数,包含Mobile和WiFi等

static long getTotalTxBytes() //总的发送字节数,包含Mobile和WiFi等

static long getTotalTxPackets() //发送的总数据包数,包含Mobile和WiFi等

static long getUidRxBytes(int uid) //获取某个网络UID的接受字节数,某一个进程的总接收量

static long getUidTxBytes(int uid) //获取某个网络UID的发送字节数,某一个进程的总发送量

参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值