Android获取网速和下载速度
16lz
2021-01-23
Android应用里经常使用到网络速度的显示,特别是文件下载和视频缓冲的时候。今天笔者就遇到需要显示视频播放时的网速,用到的是TrafficStats类。
查找资料,参考了Android流量统计TrafficStats类的使用
private void showNetSpeed() {long nowTotalRxBytes = getTotalRxBytes();long nowTimeStamp = System.currentTimeMillis();long speed = ((nowTotalRxBytes - lastTotalRxBytes) * 1000 / (nowTimeStamp - lastTimeStamp));//毫秒转换lastTimeStamp = nowTimeStamp;lastTotalRxBytes = nowTotalRxBytes;Message msg = mHandler.obtainMessage();msg.what = 100;msg.obj = String.valueOf(speed) + " kb/s";mHandler.sendMessage(msg);//更新界面}
思路就是每隔一个时间段就去获取这个时间段获取到的网络数据的大小,然后通过计算获得网速值。
private long lastTotalRxBytes = 0;private long lastTimeStamp = 0;private long getTotalRxBytes() {return TrafficStats.getUidRxBytes(getApplicationInfo().uid)==TrafficStats.UNSUPPORTED ? 0 :(TrafficStats.getTotalRxBytes()/1024);//转为KB}TimerTask task = new TimerTask() {@Overridepublic void run() {showNetSpeed();}};
在这里用到的是TimerTask来定时获取网速,并发消息更新界面。
在启动任务时,初始化数据
lastTotalRxBytes = getTotalRxBytes();lastTimeStamp = System.currentTimeMillis();new Timer().schedule(task, 1000, 2000); // 1s后启动任务,每2s执行一次
可以根据需求,多久更新获取一次网速
如果是多个任务下载,需要分别显示网速,就可以直接通过在一定时间间隔内下载的数据大小来计算网速,方法类似。
更多相关文章
- android数据库使用小结
- Android Activity、Fragment之间的数据传递和返回
- Android中数据存储的三种方式--基础
- 深入理解数据结构
- android 基于ffmpeg将视频采集的nv21转h264格式数据
- 初学Android,数据存储之File存储(四十二)