Android 下获取所有应用的流量使用量
2015-12-29 10:21
615 查看
android 系统下,获取能联网的应用的流量使用情况,我们可以确切的分析:是谁家的应用又在后台偷偷使用我的流量了。
2、 遍历所有的第一步得到 PackageManager 集合,从里面获取具有Internet权限信息的应用(没有这个权限,获取值也没有意义)
3、获取第二步得到的应用的 uid . 得到了uid。那么我们就能得到了浏览数据了。
原理:
软件流量使用数据保存在 /proc/uid_stat/uid(用户id)/ 下面文件中 /proc/uid_stat/uid/tcp_send 上传流量 /proc/uid_stat/uid/tcp_rcv 下载流量
实现步骤:
1、 使用 PackageManager 获取手机上已经安装的所有的应用2、 遍历所有的第一步得到 PackageManager 集合,从里面获取具有Internet权限信息的应用(没有这个权限,获取值也没有意义)
3、获取第二步得到的应用的 uid . 得到了uid。那么我们就能得到了浏览数据了。
实现代码:
/** * 返回所有的有互联网访问权限的应用程序的流量信息。 * TrafficInfo 为一个Bean 模型类。使用的时候可以自定义一个、。 * @return */ public List<TrafficInfo> getTrafficInfo(Context context) { //获取到配置权限信息的应用程序 PackageManager pms = context.getPackageManager();; List<PackageInfo> packinfos = pms .getInstalledPackages(PackageManager.GET_PERMISSIONS); //存放具有Internet权限信息的应用 List<TrafficInfo> trafficInfos = new ArrayList<TrafficInfo>(); for(PackageInfo packinfo : packinfos){ //获取该应用的所有权限信息 String[] permissions = packinfo.requestedPermissions; if(permissions!=null&&permissions.length>0){ for(String permission : permissions){ //筛选出具有Internet权限的应用程序 if("android.permission.INTERNET".equals(permission)){ //用于封装具有Internet权限的应用程序信息 TrafficInfo trafficInfo = new TrafficInfo(); //封装应用信息 trafficInfo.setPackname(packinfo.packageName); trafficInfo.setIcon(packinfo.applicationInfo.loadIcon(pm)); trafficInfo.setAppname(packinfo.applicationInfo.loadLabel(pm).toString()); //获取到应用的uid(user id) int uid = packinfo.applicationInfo.uid; //TrafficStats对象通过应用的uid来获取应用的下载、上传流量信息 //发送的 上传的流量byte trafficInfo.setRx(TrafficStats.getUidRxBytes(uid)); //下载的流量 byte trafficInfo.setTx(TrafficStats.getUidTxBytes(uid)); trafficInfos.add(trafficInfo); trafficInfo = null; break; } } } } return trafficInfos; }
<span style="font-size:18px;"><strong> 附:</strong></span>
<span style="font-size:18px;"><strong> </strong></span>
<span style="font-size:18px;"><strong>TrafficStats.getMobileTxBytes();//获取手机3g/2g网络上传的总流量 TrafficStats.getMobileRxBytes();//手机2g/3g下载的总流量 TrafficStats.getTotalTxBytes();//手机全部网络接口 包括wifi,3g、2g上传的总流量</strong></span> <span style="font-size:18px;"><strong>TrafficStats.getTotalRxBytes();//手机全部网络接口 包括wifi,3g、2g下载的总流量</strong></span>
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories