Android获取网速和下载速度

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() {
		@Override
		public void run() {
			showNetSpeed();
		}
	};

在这里用到的是TimerTask来定时获取网速,并发消息更新界面。

在启动任务时,初始化数据

		lastTotalRxBytes = getTotalRxBytes();
		lastTimeStamp = System.currentTimeMillis();
		new Timer().schedule(task, 1000, 2000); // 1s后启动任务,每2s执行一次

可以根据需求,多久更新获取一次网速

如果是多个任务下载,需要分别显示网速,就可以直接通过在一定时间间隔内下载的数据大小来计算网速,方法类似。

时间: 2024-10-23 02:51:14

Android获取网速和下载速度的相关文章

TrafficStats——流量统计类的范例,获取实时网速

2.3开始android就提供来这个类的API,这样我们就可以方便的用他来实现统计手机流量来.这个类其实也很简单,我贴上他的几个方法,大家一看就知道怎么用了. static long getMobileRxBytes() //获取通过Mobile连接收到的字节总数,不包含WiFistatic long getMobileRxPackets() //获取Mobile连接收到的数据包总数static long getMobileTxBytes() //Mobile发送的总字节数static long

【Linux环境编程】获取网卡的实时网速

在windows下面,我们可以看到360或者是qq安全卫士的"安全球",上面显示实时的网速情况.那么在linux里面如何获取网卡的实时网速?其实原理很简单,读取需要获取网速的网卡在某段时间dT内流量的变化dL,那么实时网速就出来了,Speed = dL / dt. linux在ifaddrs.h中提供了函数: /* Create a linked list of `struct ifaddrs' structures, one for each network interface on

手机影音第十一天,显示视频缓冲,显示卡顿时的网速,播放系统视频时调用播放器的选择

代码已经托管到码云,有兴趣的小伙伴可以下载看看 https://git.oschina.net/joy_yuan/MobilePlayer 一.设置视频缓冲进度 显示视频播放进度的效果图如下:灰色的是缓冲的进度. 原理:只有播放网络视频时,才有缓冲这个说法,所以要先判断视频资源是否为网络资源 /**  * 判断是否是网络的资源  * @param uri  * @return  */ public boolean isNetUri(String uri) {     boolean reault

iOS开发——实时监控网速

开发中用到获取网速的地方,应该就两种: 1.下载速度,这种可以直接在接受数据的地方统计计算.这个就不讲了. 2.获取手机网卡的数据,可以监控网卡的进出流量,下面就是. #import "ViewController.h" #include <ifaddrs.h> #include <arpa/inet.h> #include <net/if.h> @interface ViewController () @end @implementation Vi

ruby on rails 网页上如何实时显示服务器网速?

要在网页上实时显示网速,需要实时请求服务器(由于许多浏览器不支持web socket,这里还是用ajax轮询的方式),这里的服务器以centos为例,使用sysstat,不同的服务器,可能需要不同的软件支持. 一.centos里安装sysstat yum  install sysstat 安装完成后,使用sar -V查看 二.sar的使用 首先使用ifconfig查看使用的网上,确认一个要查看的网卡的名称,这里我使用的是eth0 然后使用sar获取网速: sar -n DEV 1 1 | gre

Android 获取当前网速质量调整网络请求

在开发中,有时候常常需要根据用户当前的网速来做一些操作,比如图片的加载,当网速非常好的时候,比如连接的是wifi,我们就会下载高分辨率的图片,反之,当用户使用的是2g网时,我们则给他下载低分辨率的小图,从而节省用户流量. 而Facebook其实已经给我们提供了这么一个库,详见network-connection-class. 使用其实超级简单,先加入依赖 compile 'com.facebook.network.connectionclass:connectionclass:1.0.1' 在该

Android例子源码--炫酷的仪表盘网速测试

Android例子源码--炫酷的仪表盘网速测试 本项目是一个仪表盘网速测试的安卓版本,原理就是下载一个固定大小的文件来进行测试,可以测试当前速度,和平均速度,跟电脑上的测速差不多,有一个很精美的仪表盘效果.本项目编码UTF-8默认编译版本4.2.2. 下载地址:http://www.devstore.cn/code/info/100.html 运行截图:    干货推荐: Google Android 官方培训教程中文版 第一行代码 Android编程权威指南 疯狂Android讲义(第2版)

网速/带宽与下载速度对照表

20兆宽带,50兆宽带,是我们在生活中经常会听到的字眼,那么这个20兆,50兆到底是怎么样定义的呢?或者说如何量化呢?最简单的方法我们可以在下载文件的时候,通过查看下载速度(如:10mb/s)大致估算出我们的网速,下面给出一个下载速度和带宽的对照表,以供参考. 常见宽带 理论最高速率(Mbps) 理论最高速率(KB/S) 常见下载速率(供参考) 1M 1 Mbps 128 KB/S 77~128 KB/S 2M 2 Mbps 256 KB/S 154~256 KB/S 3M 3 Mbps 384

网速正常但下载速度很慢是什么原因

一.网络最小宽带这应该是造成网速很快下载很慢的最主要的原因.这个原因也就是人们经常说的宽带不够,如果宽带比较高的话下载速度自然就快了起来,如果宽带比较低的话下载速度当然不会快.壹基比知曰来告诉你网速很快并不意味着宽带很高,因此如果宽带低的话下载速度也就变慢了就许多. 二.DNS解析速度DNS是一个较为专业化的名词,通俗的来说,这就是域名到IP的一个过程,这个过程的速度是需要被解析的.从一台机器的工作转换到另一台机器的过程当中,机器与机器之间只认识IP,因而这个解析也需要花费一定的时间.在两台机器