android App流量统计

news/2024/7/3 0:52:46

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

原文地址:http://keepcleargas.bitbucket.org/2013/10/12/android-App-Traffic.html ###android流量简介

  • 流量统计文件:路径/proc/net/dev

打开文件,其中 lo 为本地流量, rmnet0 为3g/2g流量, wlan0 为无线流量.

  • /sys/class/net/下 可以找到相关类别(如rmnet0)的目录.在其子目录statistics下游rx_bytes和tx_bytes记录收发流量.

  • /proc/uid_stat/{uid}/tcp_rcv记录该uid应用下载流量字节,/proc/uid_stat/{uid}/tcp_snd有该uid应用上传流量字节

###TrafficStats学习

  • TrafficStats google develop文档
  • TrafficStats 源文件 查看
  • 重要API:

static long getMobileRxBytes() //获取通过Mobile连接收到的字节总数,不包含WiFi static long getMobileRxPackets() //获取Mobile连接收到的数据包总数 static long getMobileTxBytes() //Mobile发送的总字节数 static long getMobileTxPackets() //Mobile发送的总数据包数 static long getTotalRxBytes() //获取总的接受字节数,包含Mobile和WiFi等 static long getTotalRxPackets() //总的接受数据包数,包含Mobile和WiFi等 static long getTotalTxBytes() //总的发送字节数,包含Mobile和WiFi等 static long getTotalTxPackets() //发送的总数据包数,包含Mobile和WiFi等 static long getUidRxBytes(int uid) //获取某个网络UID的接受字节数 static long getUidTxBytes(int uid) //获取某个网络UID的发送字节数

备注:TrafficStats类在Android 2.2 API Level(8)之后出现。

###设计一个合理的APP流量统计

  • 记录某App开关机流量使用

因为getUidRxBytes(int uid)getUidTxbytes(int uid)记录的是 该uid应用 在手机启动到你使用这个方法时的流量统计.故需要在手机关机时记录你这个程序在这次开关机过程中的使用流量记录.

public class ShutDownReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { //在关机时 记录uid应用 本次流量结余 } }

  • 记录Wifi中的流量使用

因为getUidRxBytes(int uid)getUidTxbytes(int uid)包括了所有网络形式的流量,即包括WIFI和3g/2g.故需要监听WIFI变化,并记录WIFI过程中该uid应用使用的流量记录.

public class WifiStateReceiver extends BroadcastReceiver implements ISusoConstants { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) { int wifistate = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_DISABLED); if (wifistate == WifiManager.WIFI_STATE_DISABLED) {//如果关闭 //结余本次wifi过程中 uid应用的 流量 } else if (wifistate == WifiManager.WIFI_STATE_ENABLED) { //记录当前uid应用的流量. } } } }

  • 使用每日闹铃统计/开机时判断昨日统计是否完成.

通过每日结余计算,得出该日APP的总流量以及WIFI流量占用和2g/3g的流量占用.

  • 获取流量代码 PackageManager pm = context.getPackageManager(); ApplicationInfo ai = pm.getApplicationInfo("com.51zaozao.traffic", PackageManager.GET_ACTIVITIES); long inTraffic = TrafficStats.getUidRxBytes(ai.uid); long outTraffic = TrafficStats.getUidTxBytes(ai.uid);

###拓展阅读

  • Android NDK学习之c/c++ 流量监控续

  • networklog

  • Can someone explain how TrafficStats works its magic in the Android OS?

  • 反编译Traffic Monitor进行学习

  • 查看原贴并表态 原文地址:http://keepcleargas.bitbucket.org/2013/10/12/android-App-Traffic.html

转载于:https://my.oschina.net/chenbilly/blog/168613


http://lihuaxi.xjx100.cn/news/247663.html

相关文章

显著性检验

显著性检验显著性检验是“统计假设检验”的一种。用来检测科学实验中实验组与对照组之间是否有差异以及差异是否显著的方法。统计假设实验:事先对总体(随机变量)的参数或总体分布形式做出一个假设,然后利用样本信息来判断这个假设…

[洛谷P1317]低洼地

题目大意:一组数,分别表示地平线的高度变化。高度值为整数,相邻高度用直线连接。找出并统计有多少个可能积水的低洼地?(首尾都为0) 题解:求出其中都多少个不严格下降子段和不严格上升子段所夹的…

PHP函数学习nl2br(),strlen(),mb_strlen()

2019独角兽企业重金招聘Python工程师标准>>> 1 nl2br($str): 注意&#xff1a;n之后的是字母L的小写&#xff0c;不要当做数字1. 函数作用&#xff1a;在$str中的每个新行(\n)之前插入HTML换行符( <br/> ) 示例&#xff1a; echo nl2br("One line.\nAnot…

nginx图片过滤处理模块http_image_filter_module安装配置笔记

http_image_filter_module是nginx提供的集成图片处理模块&#xff0c;支持nginx-0.7.54以后的版本&#xff0c;在网站访问量不是很高磁盘有限不想生成多余的图片文件的前提下可&#xff0c;就可以用它实时缩放图片&#xff0c;旋转图片&#xff0c;验证图片有效性以及获取图片宽…

串口线接口

设备com口与PC接口之间由于并无统一标准&#xff0c;有的提供了公头有的提供了母头。造成从PC的COM口与设备COM口之间可能还需要一根数据线转换拨接的可能。这根拨接的数据线却有可能是直通线、23交叉线、全交叉线中的一种&#xff0c;使用错误将导致设备不能正常工作。 1. 串…

学习Mybatis与mysql数据库的示例笔记

目录结构&#xff1a; pom.xml文件 1 <?xml version"1.0" encoding"UTF-8"?>2 <project xmlns"http://maven.apache.org/POM/4.0.0"3 xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"4 xsi:schem…

MATLAB中subplot函数使用

格式&#xff1a;subplot(m,n,p) 或 subplot(m n p) 将多个图显示到一个平面上的函数。其中m&#xff0c;n表示窗口被分为m*n块区域&#xff0c;p表示当前图所在位置。p1表示从左到右从上到下的第一个位置. clear; subplot(2,3,1);%第一块绘图 x[0.1000,0.0500,0.0100,0.0050]…

说说大型高并发高负载网站的系统架构【转】

我在CERNET做过拨号接入平台的搭建&#xff0c;而后在Yahoo&3721从事过搜索引擎前端开发&#xff0c;又在MOP处理过大型社区猫扑大杂烩的架构升级等工作&#xff0c;同时自己接触和开发过不少大中型网站的模块&#xff0c;因此在大型网站应对高负载和并发的解决方案上有一些…