Android开发——流量统计

1. 获取应用UID

在设备的proc目录下我们可以看到一些比较熟悉的目录/文件,比如data,system,cpuinfo(获取CPU信息)等,其中uid_stat的各个以应用Uid命名的目录下,便存储该应用的流量信息,包括上传和下载两个value,value/1024/1024即为MB)。因此我们需要拿到应用的Uid。

Uid是一个应用在手机里的唯一标识,一旦安装,便不会修改。通过pm的getInstalledPackages方法获取到的PackageInfo集合里的每一个对象,都可以通过拿到该应用的Uid。

int Uid = packInfo.applicationInfo.uid;

2. 通过读取文件即可获取某个应用的流量信息

拿到文件对象很简单,代码如下,通过简单的文件流操作即可完成数据的获取。这里就不具体演示了。

File file_rcv = new File("/proc/uid_stat/" + uid + "/tcp_rcv");
File file_snd = new File("/proc/uid_stat/" + uid + "/tcp_snd");
注意在文件里的数据是实时更新的,但是如果关机开机,那么文件里的数据是被清零的。因此单纯的拿到第二天0点的流量信息减去第一天0点的流量信息,但是由于用户中午有开关机行为,那么就会出错。

所以市面上的软件就是每隔几分钟就去获取一次流量信息。这样做就比较精准一些。


3. Android2.3后Google封装了该功能

由于流量统计等功能比较常用,Android2.3之后,Google便封装了上述过程,提供了相应的API。

参数当然也是应用的Uid。API使用演示如下。

//获取上传的流量值,返回为Byte类型
long tx = TrafficStats.getUidTxBytes(Uid);
//获取下载的流量值,返回为Byte类型
long rx = TrafficStats.getUidRxBytes(Uid);
建议使用系统提供的API,便可以很简单的获取到某个应用的流量情况。


原文地址:https://www.cnblogs.com/qitian1/p/6461607.html