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. SHELL脚本--变量

    环境变量 环境变量就是运行在"环境"上下文的,在这个上下文都可以引用.例如,常见的cd.ls等命令严格来说应该使用绝对路径如/bin/ls来执行,由于/bin目录加入到了PATH环 ...

  2. jenkins+maven+svn实现springboot项目的自动化部署过程

    说明:部署springboot项目的jar 前提(参考:https://www.cnblogs.com/myitnews/p/11493779.html): 全局安全配置(前面配置过) 全局工具配置( ...

  3. idea中怎么忽略(ignore)掉 .idea等文件

    idea需要下载一个专门的plugins 来ignore .idea *.iml等文件 可以在https://plugins.jetbrains.com/idea/plugin/7495–ignore ...

  4. 使用hangfire在xunit中

    框架为:abp hangfire配置连接:https://aspnetboilerplate.com/Pages/Documents/Hangfire-Integration 在单元测试中如何配置呢? ...

  5. Tomcat服务部署与Nginx负载均衡配置

    一.中间键产品介绍 目前来说IBM的WebSphere,Oracle的Weblogic占据了市场上java语言Web站点的部分份额,该两种软件都是商业化的软件,由于性能优越,可靠性高等优点应用于大型互 ...

  6. [LeetCode] 864. Shortest Path to Get All Keys 获得所有钥匙的最短路径

    We are given a 2-dimensional grid. "." is an empty cell, "#" is a wall, "@& ...

  7. [LeetCode] 285. Inorder Successor in BST 二叉搜索树中的中序后继节点

    Given a binary search tree and a node in it, find the in-order successor of that node in the BST. Th ...

  8. nginx ubantu 安装步骤

    Ubuntu14.04默认安装的是Nginx 1.4.6 如果已经安装,请先卸载sudo apt-get remove nginx最新的稳定版Nginx 1.6.0在ubuntuupdates ppa ...

  9. NTT&FFT(快速?变换)

    NTT&FFT 预先知识:无 我觉得我们可以从NTT/FFT讲起? 两个其实本质相同,都是求 多项式乘积 的算法 FFT \((x,y)\)指复数,我们可以不用管它 首先我们构造单位根\(\o ...

  10. Java软件生产监控工具Btrace的使用

    Btrace BTrace是sun公司推出的一款Java 动态.安全追踪(监控)工具,可以在不用重启的情况下监控系统运行情况,方便的获取程序运行时的数据信息,如方法参数.返回值.全局变量和堆栈信息等, ...