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
android 实时获取网速的更多相关文章
- iOS开发——实时监控网速(仅作参考,发现一点问题)
开发中用到获取网速的地方,应该就两种: 1.下载速度,这种可以直接在接受数据的地方统计计算.这个就不讲了. 2.获取手机网卡的数据,可以监控网卡的进出流量,下面就是. #import "Vi ...
- ubuntu实时显示网速cpu占用和内存占用率
ubuntu实时显示网速cpu占用和内存占用率 大家在使用ubuntu的时候,有没有想让它实时显示网速,内存占用率,或者cpu占用率呢?现在我就教大家怎么实现,就像下面这样 1. 添加indicato ...
- Android 平台 HTTP网速測试 案例 API 分析
作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/25996817 工信部规定的网速測试标准 : 除普通网页測速 ...
- 【Android 应用开发】Android 平台 HTTP网速测试 案例 API 分析
作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/25996817 工信部规定的网速测试标准 : 除普通网页测速 ...
- Android 平台 HTTP网速测试 案例 API 分析
作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/25996817 工信部规定的网速测试标准 : 除普通网页测速 ...
- 【Android 应用开发】Android 平台 HTTP网速測试 案例 API 分析
作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/25996817 工信部规定的网速測试标准 : 除普通网页測速 ...
- Android中获取网页表单中的数据实现思路及代码
在Android中获取网页里表单中的数据具体实现代码如下,感兴趣的各位可以参考过下哈,希望对大家有所帮助 MainActivity如下: 复制代码 代码如下: package cn.testjavas ...
- Android中获取网页表单中的数据
MainActivity如下: package cn.testjavascript; import java.util.StringTokenizer; import android.os.Bundl ...
- Ubuntu 18.04实现实时显示网速
1.添加源 sudo add-apt-repository ppa:fossfreedom/indicator-sysmonitor 2.更新源 sudo apt-get update 3.安装sys ...
随机推荐
- JAVA大数的一些操作
参考: https://www.cnblogs.com/tonyyy/p/10433460.html https://www.cnblogs.com/wkfvawl/p/9377441.html (d ...
- 生产者和消费者模型producer and consumer(单线程下实现高并发)
#1.生产者和消费者模型producer and consumer modelimport timedef producer(): ret = [] for i in range(2): time.s ...
- continue and break
#1.continue终止当前循环开始下一次循环count = 0while count < 10: if count == 7: count = count +1 continue print ...
- WARN Connection to node 2 could not be established. Broker may not be available. (
启动 kafka 集群, 出现这个问题 WARN Connection to node 2 could not be established. Broker may not be available. ...
- 水晶报表报错:log4net初始值问题
运行水晶报表的程序一直出错,报错如下: System.TypeInitializationException: “CrystalDecisions.ReportSource.ReportSourceF ...
- AWS云教育账号创建以及搭建数据库
注册过程繁琐,本文强调关键几点 首先拿到aws的二维码,进入之后填写相关个人信息,用学校邮箱注册,用学校邮箱注册!! 之后审核会有大约10分钟的过程,之后会收到确认邮件 点进去之后就可以设置自己的密码 ...
- appium--元素等待和屏幕截图
元素等待 设置元素等待可以更加灵活的指定等待元素的时间,从而增强脚本的健壮性,提高执行效率 强制等待 from time import sleep sleep(5) 隐式等待 隐式等待是针对全部元素设 ...
- AtCoder Grand Contest 038 简要题解
从这里开始 比赛目录 Problem A 01 Matrix Code #include <bits/stdc++.h> using namespace std; typedef bool ...
- 2019年上-C语言程序设计-第1次blog作业
准备工作(20分) 1.在博客园申请个人博客,以真实姓名和学号加入班级博客(链接地址) 2.关注邹欣老师博客(并寻找答案:邹欣老师是谁?是做什么的?).关注任课老师博客 3.注册登录中国大学MOOC网 ...
- etcd v3 ssl 集群添加新节点
集群搭建 下面只用同一台服务器进行三个成员节点的开启 节点1 ./etcd --name cd0 --initial-advertise-peer-urls http://127.0.0.1:2380 ...