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,便可以很简单的获取到某个应用的流量情况。

最新文章

  1. C#中双问号、双冒号等几个特殊关键字
  2. ROW_NUMBER over (order by **)
  3. css3实现进度条的模拟
  4. u1-nav-js
  5. j2ee项目后置类代码实现跳出iframe页面跳转
  6. kotlin使用手记
  7. 一些as的配置
  8. 50一个Android开发技巧(01 利用好layout_weight属性)
  9. 自动化利器-RPM自定义打包
  10. java构造代码块,构造函数和普通函数的区别和调用时间
  11. BZOJ1758: [Wc2010]重建计划(01分数规划+点分治+单调队列)
  12. 2019.01.02 bzoj2467: [中山市选2010]生成树(矩阵树定理)
  13. scp 免密登录ssh-copy-id 如何使用非22端口 + rsync 同步远程机器的文件到本地
  14. ios 6.1中 Release问题
  15. 洛谷P1742 最小圆覆盖(计算几何)
  16. Docker 入门相关
  17. VUE 跳转另一页面返回之前页面刷新,但数据依然存在
  18. 【leetcode 简单】第十题 实现strStr()
  19. 谜题22:URL的愚弄
  20. React Native :加载新闻列表

热门文章

  1. JSP | 基础 | 加载类失败:com.mysql.jdbc.Driver
  2. pyinstaller 打包.exe文件记录遇到的问题
  3. 496 Next Greater Element I 下一个更大元素 I
  4. Backbone学习记录(5)
  5. PHP连接数据操作步骤
  6. 享元模式及php实现
  7. 基于socketserver实现的并发(tcp和udp)
  8. hihocoder offer收割编程练习赛9 B 水陆距离
  9. Excuse me?这个前端面试在搞事!
  10. mysql 查询数据库参数命令