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的发送字节数,某一个进程的总发送量
参考于:https://blog.csdn.net/always_and_forever_/article/details/81974920
参考:
https://www.csdn.net/gather_27/MtTakg1sNzQ3MC1ibG9n.html
https://www.jianshu.com/p/377ffb0f24ad
https://blog.csdn.net/xueshao110/article/details/82766390