最近无聊看了关于android流量监控方面的知识,发觉android在这方面做得很是全面,google已经将对于流量监控类TrafficStats都封装好了,非常容易上手,对于学习android开发的人来说,无疑是极大的利器。

先此声明:以下的例子大部分来自于网络(就是我学流量监控的时候,在网上找的例子),但个人觉得,例子本身写得非常棒,所以自己稍作修改拿来摆上架~~~呵呵呵呵呵。

好了,废话不多说,转入正题。

在看代码前,先说明一下android怎样统计手机内的流量的使用情况的呢?其实,

Android是基于linux的一个操作系统。

在Android中,你用Root Explorer去查看系统文件的话,与流量监控相关的会有这么几个文件/proc/net/dev这个文件中具体记录的暂时不是非常清楚,可能是整个系统的一个流量情况。

/proc/uid_stat/%d" 和"/proc/uid_stat/%d" %d为进程的UID。这个文件里只有两项数据tcp_rcv和tcp_snd。

看命名大家应该就能看出代表什么,一个代表总的接受字节数,一个代表总的发送字节数。

这两个文件为非标准linux内核文件,由android内核层/kernel/net/Socket.c 的__sock_sendmsg函数负责写入, 用户层套接字通信在内核层最终会调用此函数 (包括本地套接字和网络套接字)。

而Android在2.3之前是没有封装响应的流量监控API的。在2.3之后呢,把数据流量监控封装到了Android.net.TrafficStats类中。其原理就是读取上文提到的那几处文件。其中有的方法也是读取的别的文件。 先让我们来看一下配置文件,main.xml

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical">

android:id="@+id/showList"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="显示当前程序流量"/>

配置文件非常的简单,只是定义了一个Button组件,其id为showList

好了,再来看一下activity内的代码

publicclassTrafficStatsActivityextendsActivity {

/** Called when the activity is first created. */

privateButton showBtn=null;

@Override

publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

showBtn=(Button) findViewById(R.id.showList);

showBtn.setOnClickListener(newButtonListener());

}

publicvoidgetAppTrafficList(){

//获取所有的安装在手机上的应用软件的信息,并且获取这些软件里面的权限信息

PackageManager pm=getPackageManager();//获取系统应用包管理

//获取每个包内的androidmanifest.xml信息,它的权限等等

List pinfos=pm.getInstalledPackages

(PackageManager.GET_UNINSTALLED_PACKAGES | PackageManager.GET_PERMISSIONS);

//遍历每个应用包信息

for(PackageInfo info:pinfos){

//请求每个程序包对应的androidManifest.xml里面的权限

String[] premissions=info.requestedPermissions;

if(premissions!=null&& premissions.length>0){

//找出需要网络服务的应用程序

for(String premission : premissions){

if("android.permission.INTERNET".equals(premission)){

//获取每个应用程序在操作系统内的进程id

intuId=info.applicationInfo.uid;

//如果返回-1,代表不支持使用该方法,注意必须是2.2以上的

longrx=TrafficStats.getUidRxBytes(uId);

//如果返回-1,代表不支持使用该方法,注意必须是2.2以上的

longtx=TrafficStats.getUidTxBytes(uId);

if(rx<0|| tx<0){

continue;

}else{

Toast.makeText(this, info.applicationInfo.loadLabel(pm)+"消耗的流量--"+

Formatter.formatFileSize(this, rx+tx), Toast.LENGTH_SHORT);

}

}

}

}

}

}

privateclassButtonListenerimplementsOnClickListener{

@Override

publicvoidonClick(View v) {

// TODO Auto-generated method stub

getAppTrafficList();

}

}

}

这里要注意的是这三句代码:

//获取每个应用程序在操作系统内的进程id

intuId=info.applicationInfo.uid;

//如果返回-1,代表不支持使用该方法,注意必须是2.2以上的

longrx=TrafficStats.getUidRxBytes(uId);

//如果返回-1,代表不支持使用该方法,注意必须是2.2以上的

longtx=TrafficStats.getUidTxBytes(uId); 头一句代码主要的作用是获取声明到的网络权限的application的进程系统id,就类似与我们window下的进程PID。 而第二句的作用毫无疑问的就是根据该进程的id获取到改应用程序开机到现在从网络上接收到的字节(以KB为单位),最后一句则是根据该进程的id获取到改应用程序开机到现在向网络上发送的字节(以KB为单位)。好了其他的也就没什么了。一些代码我也子啊程序内注有注释了。最后说一句,TrafficStats这个类只能在android2.2以上的版本才能够使用,还有,测试的时候最好用真机来测试。因为模拟器的话,可能会造成rx和tx这两个参数总为-1. ^ _^

android 使用流量监控,android流量监控相关推荐

  1. android流量显示插件,[android]仿360状态,种流量监控桌面浮动显示

    [android]仿360状态,类流量监控桌面浮动显示 前两天看到部分音频播放器可以实现在桌面上显示歌词,360那个浮动的桌面提示,想不到怎么实现.然后查了些资料大致了解了下,比想象的简单多了.先看效 ...

  2. Android:全面详细的解析Android数据流量统计流程与分析方法(流量检测、流量监控、流量提示)相关类PhoneStateListener,dcTracker,TrafficStats

    作者:GentlemanTsao https://blog.csdn.net/GentelmanTsao 每篇一格言 Stay hungry,stay foolish! --Steve Jobs 文章 ...

  3. App性能测试——使用GT监控手机流量

    使用GT测试流量: 对流量要求没有那么严格的话可以在安卓的设置里面查看 Wireshark:抓包分析工具,也提供了安卓手机的抓包实现,GT中抓包的功能就是 在其提供的实现基础上的易用性封装起来,在本次 ...

  4. 关于浙政钉、专有钉钉的数据埋点小心得总结(稳定性监控、流量分析)

    关于浙政钉.专有钉钉的数据埋点小心得总结(稳定性监控.流量分析) 先说一下关于专有钉钉得开放文档专有钉钉门户这上面会有一些入门介绍,以及api文档,可以方便开发者迅速上手.本文得重点是说明如何进行数据 ...

  5. Android中wifi与数据流量的切换监听

    最近在做一个wifi和移动数据的监控功能,来来回回折腾了一阵子,这个模块的主要功能是监听整个APP的wifi与数据流量的切换,让用户使用专用流量,而不是用wifi,给一个弹窗,点击确认,自动切换数据流 ...

  6. [置顶] Android代码----android获取3G或wifi流量信息

    android获取3G或wifi流量信息: IBatteryStats battryStats = IBatteryStats.Stub.asInterface(ServiceManager.getS ...

  7. linux 下iptraf监控网卡流量

    linux 系统下 iptraf监控网卡流量,监控eth0网卡的流量如下所示: [root@web01]# iptraf -d eth0      转载于:https://blog.51cto.com ...

  8. Shell图形化监控网络流量

    shell图形化监控网络流量 网络流量的监控工具有很多,如:Mrtg.Cacti.Zabbix等等,他们都有着各自的特点,不同的侧重,只为适合不同的应用场景的各种特殊需求.除了网络流量监控工具以外,还 ...

  9. 在 Linux/UNIX 终端下使用 nload 实时监控网络流量和带宽使用

    摘要:如果你想在命令行界面监控网络吞吐量,nload应用程序是个不错的选择.它是一个实时监控网络流量和带宽使用的控制台应用程序,使用两个图表可视化地展示接收和发送的流量,并提供诸如数据交换总量.最小/ ...

  10. 监控 DNS 流量,预防安全隐患五大招!

    2019独角兽企业重金招聘Python工程师标准>>> 尽管 IT 管理员尽心尽责地监控设备.主机和网络是否存在恶意活动的迹象,却往往出力不讨好.主机入侵检测和端点保护对很多公司来说 ...

最新文章

  1. ajax请求中的reponseType和withCredetials分别是啥?
  2. LaTex中的任意以及存在符号以及{}
  3. ICPC / CCPC / Codeforces / AtCoder 单词本
  4. python写的游戏怎么给别人玩-用python写游戏脚本原来这么简单
  5. 设置Windows 10时如何创建本地帐户
  6. windows下如何查看磁盘IO性能
  7. 你的Parquet该升级了:IOException: totalValueCount == 0问题定位之旅
  8. EasyUI加载树控件自动展开所有目录
  9. Clojure的并发(七)pmap、pvalues和pcalls
  10. Unity Behaviors for Interception
  11. 三星 s4(i9502) android4.4rom 官方,三星I9502(S4)联通版一键ROOT权限获取+USB驱动
  12. python函数的调用方式_Python中函数参数调用方式分析
  13. Andriod7.0之wifi开启流程(含流程框图及流程图)
  14. FusionComputer密码修改
  15. 公司股权结构设计的原则与因素
  16. 教你制作第一个C++游戏!#1 引入
  17. ALU,半加器,全加器,减法电路
  18. 【华为OD机试真题 python】补种未成活胡杨 【2022 Q4 | 100分】
  19. R语言迹检验协整关系式_使用R语言进行协整关系检验
  20. 零极点是怎么产生的对环路的影响

热门文章

  1. matlab学习五,二元函数绘图方法
  2. udacity 学java_刷完udacity的JavaScript,我想说……
  3. 提升自己的认知-思维模型
  4. 文件转为二进制流保存在数据库
  5. 【电力电子】【2012.07】基于功率因数校正的三相整流器设计与仿真
  6. 大学生做 app 开发,用云服务和租赁服务器,哪个更合适?
  7. 马云把码云封了,中国最大的男性交友网站无法访问!!!
  8. SAR变化检测的性能指标(kappa系数)——简化版
  9. 通信信道带宽为1Gbit/s,端到端时延为10ms。TCP的发送窗口为65535字节。试问: 可能达到的最大吞吐量是多少?信道的利用率是多少?
  10. 线性回归(线性拟合)与非线性回归(非线性拟合)原理、推导与算法实现(一)