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 ...
随机推荐
- day16_7.18 常用模块
一.collections collections模块中提供了除了dict,list,str等数据类型之外的其他数据类型:Counter.deque.defaultdict.namedtuple和Or ...
- jmeter引用jar包的3种方式
示例 实现对登录密码进行MD5加密 pom文件依赖 <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec --& ...
- 莫烦TensorFlow_03 Variable加法
import tensorflow as tf ## 定义变量 state = tf.Variable(0, name = 'counter') #print(state.name) one = tf ...
- django之三剑客、静态文件配置、请求响应对象、数据库操作
三剑客 from django.shortcuts import render,HttpResponse,redirect HttpResponse # 返回字符串 render(response, ...
- jsp转long类型为date,并且格式化
方式一.使用java脚本 <% Long time = (Long)request.getAttribute("longtime"); Date date=new Date( ...
- koa2中的ctx是什么?
为了试图搞明白,用console.log将它输出 const Koa = require('koa'); const app = new Koa(); app.use(ctx => { ctx. ...
- docker sentry 配置文件位置
root@50f8462579a8:/etc/sentry# cd /etc/sentry/ root@50f8462579a8:/etc/sentry# ls config.yml sentry.c ...
- <Trie> 212 <Array> 229
212. Word Search II class TrieNode{ char val; TrieNode[] children; String word; public TrieNode(char ...
- <Math> 50 367
50. Pow(x, n) abs (Integer.MIN_VALUE) > Integer.MAX_VALUE class Solution { public double myPow(do ...
- Python-lambda使用
什么是lambda 匿名函数,不需要命名的函数: 语法 lambda 参数 : 返回值 g = lambda x: 2*x+1 g(2) >5