Android6.0流量统计

android 6.0强大的流量统计工具NetworkStatsManager

从android 6.0以后,android又提供一个强大的流量统计工具:NetworkStatsManager

NetworkStatsManager简单解释

关于该类官网介绍如下:

简单翻译就是:该类提供一个网络使用的历史以及数据统计,数据被封装在一个称为“Buckets”的时间离散集合中。

该类提供的一些方法:
从方法说明中可以看到,可以根据应用程序uid统计流量信息,还可以统计具体时间段的流量使用情况.
测试代码:(仅仅统计功能实现函数,参考即可)
<!--该权限需要系统应用才能使用-->

<uses-permission android:name="android.permission.READ_NETWORK_USAGE_HISTORY"/>
显示数据的函数:
@TargetApi(23)
private void showData(int type) {
   Log.e("showData", "sdk:" + Integer.toString(Build.VERSION.SDK_INT));
   if (23 > Build.VERSION.SDK_INT) {
      stringBuffer.append("设备不支持统计,请使用安卓6.0以上系统");
      tvshowdata.setText(stringBuffer.toString());
      return;
   }
   try {
//设置统计时间
      Calendar calendar = Calendar.getInstance();
      calendar.set(Calendar.HOUR_OF_DAY, 0);
      calendar.set(Calendar.MINUTE, 0);
      calendar.set(Calendar.SECOND, 0);
      etime = System.currentTimeMillis();
      stime = calendar.getTimeInMillis();
      calendar.clear();
      NetworkStatsManager nsm = (NetworkStatsManager) MainActivity.this.getSystemService(Context.NETWORK_STATS_SERVICE);      
      PackageManager packageManager = getPackageManager();      
      List<PackageInfo> packageInfos = packageManager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);      
      for (PackageInfo p : packageInfos) {         
      if ("com.huawei.health".equals(p.packageName)) {            
      healthuid = p.applicationInfo.uid;            
      showappicon.setImageDrawable((Drawable) p.applicationInfo.loadIcon(getPackageManager()));            
      showappname.setText(p.applicationInfo.loadLabel(getPackageManager()).toString());         
      }         
      Log.e("安装包:", p.packageName + "  uid:" + p.applicationInfo.uid);      
      }      
      stringBuffer.delete(0, stringBuffer.length());      
      NetworkStats networkStats = nsm.querySummary(type, null,stime, etime);      
      ArrayList<NetworkStats.Bucket> bucketList = new ArrayList<NetworkStats.Bucket>();      
      while (networkStats.hasNextBucket()) {         
      NetworkStats.Bucket bucket = new NetworkStats.Bucket();         
      if (networkStats.getNextBucket(bucket)) {            
      Log.e("bucket:", bucket.toString() + " uid:" + bucket.getUid());            
      if (bucket.getUid() == healthuid) {               
      bucketList.add(bucket);            
      }         
      }      
      }      
      stringBuffer.append("详细信息:\r\n\r\n");      
      for (int i = 0; i < bucketList.size(); i++) {         
      rxbytes += bucketList.get(i).getRxBytes();         
      txbytes += bucketList.get(i).getTxBytes();         
      stringBuffer.append("uid:" + Integer.toString(healthuid) + "\r\n 接收: " + Long.toString(bucketList.get(i).getRxBytes() / 1000) + "kb \r\n 发送:" + Long.toString(bucketList.get(i).getTxBytes() / 1000) + "kb\r\n\r\n");
      }      
      if (txbytes > 1048576) {         
      showTx.setText("Tx: \r\n" + log.df((((double) txbytes) / 1048576.0), "0.00") + " Mb");
      } else {         
      showTx.setText("Tx: \r\n" + Long.toString(txbytes / 1024) + " Kb");      
      }      
      if (rxbytes > 1048576) {         
      showRx.setText("Rx: \r\n" + log.df((((double) rxbytes) / 1048576.0), "0.00") + " Mb");      
      } else {         
      showRx.setText("Rx: \r\n" + Long.toString(rxbytes / 1024) + " Kb");      }      
      if ((rxbytes + txbytes)> 1048576) {         
      showtotal.setText("Total: \r\n" + log.df((((double) (rxbytes + txbytes)) / 1048576.0), "0.00") + " Mb");      
      } else {         
      showtotal.setText("Total: \r\n" + Long.toString((rxbytes + txbytes) / 1024) + " Kb");      
      }      
      tvshowdata.setText(stringBuffer.toString());      
      rxbytes = 0;      
      txbytes = 0;   
      } catch (RemoteException e) {      
      log.e(tag,"出现异常RemoteException",isshowlog);      
      e.printStackTrace();   
      }catch (Exception e1){      
      log.e(tag,"出现异常Exception",isshowlog);      
      e1.printStackTrace();   
      }
      }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值