1. 获取应用UID

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

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

  1. int Uid = packInfo.applicationInfo.uid;

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

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

  1. File file_rcv = new File("/proc/uid_stat/" + uid + "/tcp_rcv");
  2. File file_snd = new File("/proc/uid_stat/" + uid + "/tcp_snd");

注意在文件里的数据是实时更新的,但是如果关机开机,那么文件里的数据是被清零的。因此单纯的拿到第二天0点的流量信息减去第一天0点的流量信息,但是由于用户中午有开关机行为,那么就会出错。

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

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

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

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

  1. //获取上传的流量值,返回为Byte类型
  2. long tx = TrafficStats.getUidTxBytes(Uid);
  3. //获取下载的流量值,返回为Byte类型
  4. long rx = TrafficStats.getUidRxBytes(Uid);

建议使用系统提供的API,便可以很简单的获取到某个应用的流量情况。

Android开发——流量统计的更多相关文章

  1. android app 流量统计

    https://blog.csdn.net/yzy9508/article/details/48300265 | android 数据流量统计 - CSDN博客https://blog.csdn.ne ...

  2. Android学习笔记_64_手机安全卫士知识点归纳(4) 流量统计 Log管理 混淆打包 加入广告 自动化测试 bug管理

    android 其实就是linux 上面包装了一个java的框架. linux 系统下 所有的硬件,设备(网卡,显卡等) 都是以文件的方式来表示. 文件里面包含的有很多设备的状态信息. 所有的流量相关 ...

  3. Android流量统计TrafficStats类

    对于Android流量统计来说在2.2版中新加入了TrafficStats类可以轻松获取,其实本身TrafficStats类也是读取Linux提供的文件对象系统类型的文本进行解析. android.n ...

  4. Mapreduce的序列化和流量统计程序开发

    一.Hadoop数据序列化的数据类型 Java数据类型 => Hadoop数据类型 int IntWritable float FloatWritable long LongWritable d ...

  5. android流量统计

    研究过一段时间的android流量统计发个自己的总结帖 1 android有一个TrafficStats类可以直接获取 总接受流量TrafficStats.getTotalRxBytes(), 总发送 ...

  6. android 流量统计

    1 android通过架构流量统计TrafficStats类可以直接获得     获得总流量受理TrafficStats.getTotalRxBytes(),     获得总传出流量TrafficSt ...

  7. Android中进行流量统计

    // ---------------------流量统计-------------------------------- try { PackageManager pm = getPackageMan ...

  8. 重磅发布:《阿里巴巴Android开发手册(规约)》

    1.前言 阿里巴巴于近日为广大程序员再送上重磅开春好礼:<阿里巴巴Android开发手册(规约)>.该开发规范在阿里内部经过了长期的修缮,现已总结成册,向所有移动开发者.技术爱好者开放,希 ...

  9. 【转】Android开发笔记(序)写在前面的目录

    原文:http://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经 ...

随机推荐

  1. Oracle 正则化

    摘抄自:http://www.cnblogs.com/scottckt/archive/2012/10/11/2719562.html ORACLE中的支持正则表达式的函数主要有下面四个: 1,REG ...

  2. C/C++ 动态库so的生成与调用

    1. Linux-(C/C++)动态链接库生成以及使用(libxxx.so) 2. C++文件如何在linux下生成动态库So,以及如何使用这个动态库 3. c++ 发布动态.so 简记1. 编译生成 ...

  3. SP1805 Largest Rectangle in a Histogram

    题目链接: 洛谷SP1805 题意: 如图所示,在一条水平线上有n个宽为1的矩形,求包含于这些矩形的最大子矩形面积(图中的阴影部分的面积即所求答案) 输入格式: 有多组测试数据,每组数据占一行.输入零 ...

  4. Squid启动报:Could not determine this machines public hostname. Please configure one or set 'visible_hostname'.

    在squid.conf中添加 visible_hostname squid.packet-pushers.net 或者编辑/etc/hosts文件, 在该文件中制定主机IP地址与主机名的对应.

  5. Keepalived+LVS(DR)+MySQL

    实验环境 主机名 IP VIP 服务 主备 KA_LV_MYSQL_01 192.168.30.130 192.168.30.100 keepalived.LVS.MySQL MASTER KA_LV ...

  6. nginx配置参考

    server { listen 443 ssl; server_name apps.qimeng.fm; #charset koi8-r; #证书 ssl_certificate /usr/local ...

  7. AJPFX关于hashmap和hashtable 的区别

    Hashtable和HashMap类有三个重要的不同之处.第一个不同主要是历史原因.Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现. ...

  8. 初识node,原理与浏览器何其相似

    话不多说,直接上图. 今日入手开始学习Nodejs,加油吧,小小前端的大V梦ヾ(◍°∇°◍)ノ゙

  9. mysql5.5版本导入sql报错

    1 在5.5的版本中不支持utf8_german2的类型 2 在5.5版本中只支持timestamp类型设置默认值为CURRENT_TIMESTAMP,不支持datetime类型默认值设置为CURRE ...

  10. qt read excel

    void exceladapter::readfile(QString filename, QString sheetname, int colNo){ QSqlDatabase db = QSqlD ...