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

android 实时获取网速的更多相关文章

  1. iOS开发——实时监控网速(仅作参考,发现一点问题)

    开发中用到获取网速的地方,应该就两种: 1.下载速度,这种可以直接在接受数据的地方统计计算.这个就不讲了. 2.获取手机网卡的数据,可以监控网卡的进出流量,下面就是. #import "Vi ...

  2. ubuntu实时显示网速cpu占用和内存占用率

    ubuntu实时显示网速cpu占用和内存占用率 大家在使用ubuntu的时候,有没有想让它实时显示网速,内存占用率,或者cpu占用率呢?现在我就教大家怎么实现,就像下面这样 1. 添加indicato ...

  3. Android 平台 HTTP网速測试 案例 API 分析

    作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/25996817 工信部规定的网速測试标准 : 除普通网页測速 ...

  4. 【Android 应用开发】Android 平台 HTTP网速测试 案例 API 分析

    作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/25996817 工信部规定的网速测试标准 : 除普通网页测速 ...

  5. Android 平台 HTTP网速测试 案例 API 分析

    作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/25996817 工信部规定的网速测试标准 : 除普通网页测速 ...

  6. 【Android 应用开发】Android 平台 HTTP网速測试 案例 API 分析

    作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/25996817 工信部规定的网速測试标准 : 除普通网页測速 ...

  7. Android中获取网页表单中的数据实现思路及代码

    在Android中获取网页里表单中的数据具体实现代码如下,感兴趣的各位可以参考过下哈,希望对大家有所帮助 MainActivity如下: 复制代码 代码如下: package cn.testjavas ...

  8. Android中获取网页表单中的数据

    MainActivity如下: package cn.testjavascript; import java.util.StringTokenizer; import android.os.Bundl ...

  9. Ubuntu 18.04实现实时显示网速

    1.添加源 sudo add-apt-repository ppa:fossfreedom/indicator-sysmonitor 2.更新源 sudo apt-get update 3.安装sys ...

随机推荐

  1. SQLAlchemy查询数据库数据

    首先创建模型,在数据库里面生成表,然后填入数据,如下 # 定义orm,数据模型 class Test(db.Model): __tablename__ = 'test' id = db.Column( ...

  2. docker 中,修改了 mysql 配置,如何重启 mysql?

    直接重新启动容器: docker restart containerID/containerName

  3. day12_7.12递归函数与算法

    一.递归函数 递归函数是在函数的调用阶段直接或间接的调用自己. 于是下面就是一个简单的递归函数: def func(): print('我调我自己') func() func() 然而结果会报错,因为 ...

  4. Mysql数据库基础命令

    删除一个表: drop table if exists 表名; 在表中插入行: Insert into 表名 values(, , ,) 创建表: Create table 表名( Id int(10 ...

  5. Identity入门2:AuthenticationManager【转】

    在 上篇文章 中讲了关于 Identity 需要了解的单词以及相对应的几个知识点,并且知道了Identity处在整个登入流程中的位置,本篇主要是在 .NET 整个认证系统中比较重要的一个环节,就是 认 ...

  6. 使用Intellij idea新建Java Web项目(servlet) 原理及初步使用

    准备 JDK       (配置JDK_HOME\bin   和 CLASSPATH)   注:JDK8下载已经需要注册了,请使用JDK11(现在是官方长期支持的版本)     对于我们新手来说,JD ...

  7. Npcap:Nmap项目里一个为Windows而生的嗅探库 Npcap: Nmap Project's packet sniffing library for Windows

    如果有人知道Npcap与libpcap对应的头文件列表,请告诉我,非常感谢 Introduction介绍 This Manual describes the programming interface ...

  8. loj 2719 「NOI2018」冒泡排序 - 组合数学

    题目传送门 传送门 题目大意 (相信大家都知道) 显然要考虑一个排列$p$合法的充要条件. 考虑这样一个构造$p$的过程.设排列$p^{-1}_{i}$满足$p_{p^{-1}_i} = i$. 初始 ...

  9. Canal订阅binlog变更并结合kafka实现消息缓冲

    阿里Canal项目请先了解:canal 考虑可能binlog大批量变更,如果直接通过Canal订阅binlog变动,会造成CanalClient会瞬间爆掉.为了解决这个问题,我们可以引入kafka做一 ...

  10. java包学习之JDBC

    public class DemoJDBC { public static void main(String[] args) throws ClassNotFoundException, SQLExc ...