android中每个应用程序都会产生流量,这个流量其实就在手机的一个文件夹中存储,我们要想获得其实就是找到这个文件夹,然后读取其中的数据就好了
流量分为上传的流量和下载的流量
上传的流量存储在:”/proc/uid_stat/”+uid+”/tcp_rcv”
下载的流量存储在:”/proc/uid_stat/”+uid+”/tcp_snd”
uid 是什么呢?
其实每个安装到手机上的应用程序都唯一对应一个uid
如何获取到uid 呢?
关键代码
PackageManager pm = getPackageManager();//获取包的管理器
List<PackageInfo> packInfos = pm.getInstalledPackages(0);// 所有的安装在系统上的应用程序包信息
for (PackageInfo packageInfo : packInfos) {// 遍历所有的包信息
int uid = packageInfo.applicationInfo.uid;// 拿到应用程序的uid
String packName = packageInfo.packageName;// 获取包名
Drawable icon = packageInfo.applicationInfo.loadIcon(pm);// 获取应用程序图标
String name = packageInfo.applicationInfo.loadLabel(pm).toString();// 获取应用程序名称
File file_rev = new File("/proc/uid_stat/"+uid+"/tcp_rcv");//获取下载的流量存放的文件,"/proc/uid_stat/"+uid+"/tcp_rcv"就是下载的流量存放的文件夹的路径
File file_snd = new File("/proc/uid_stat/"+uid+"/tcp_snd");//获取上传流量存放的文件,根据文件的路径得到文件,在读取其中的内容就能得到数据
}
但是android为我们封装好了一些api,所以不需要我们自己new File然后读取文件
参考别人