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