android App流量统计
原文地址: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 {@Overridepublic 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的流量占用.
获取流量代码
<br />PackageManager pm = context.getPackageManager(); <br />ApplicationInfo ai = pm.getApplicationInfo("com.51zaozao.traffic", PackageManager.GET_ACTIVITIES); <br />long inTraffic = TrafficStats.getUidRxBytes(ai.uid); <br />long outTraffic = TrafficStats.getUidTxBytes(ai.uid); <br />
拓展阅读
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
更多相关文章
- (未解决)问题记录ionic android 签名之后安装到手机上点击运行出
- Android(安卓)MIFARE读写器详解2
- 初学了解MVC在android中的应用
- android 官方文档阅读记录-多屏幕适配
- Android面试题算法篇
- Android(安卓)GridView/ListView点击事件并改变控件的背景颜色//
- Android上的CPU信息监测
- Realm for Android(安卓)简单使用
- 天天记录 - Android(安卓)addView源码分析