Android 下获取所有应用的流量使用量

   android 系统下,获取能联网的应用的流量使用情况,我们可以确切的分析:是谁家的应用又在后台偷偷使用我的流量了

   原理:

        
软件流量使用数据保存在 /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>

 
 
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值