您的位置:首页 > 移动开发 > Android开发

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

2015-12-29 10:21 615 查看
   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>


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android 流量 应用