博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android App流量统计
阅读量:6501 次
发布时间:2019-06-24

本文共 2174 字,大约阅读时间需要 7 分钟。

hot3.png

原文地址: ###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学习

  • 重要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);

###拓展阅读

  • 原文地址:

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

你可能感兴趣的文章
SharePoint 2007(MOSS) ,WSS ,Project Server 2007 灾难恢复
查看>>
老调重弹:年龄大了,码农何去何从 (长篇技术文学巨著)
查看>>
RHEL6.4 apache搭建WEB网站,安装日志分析工具awstats
查看>>
vue插件
查看>>
Dell EMC unity500使用iSCSI连接Esxi6.7
查看>>
时也,运也,命也
查看>>
javascript的offsetLeft、scrollLeft、offsetTop、scro...
查看>>
day06-基础语法了解
查看>>
PHP单态设计模式应用实例
查看>>
ORACEL学习--分析函数汇总
查看>>
windows Server 2016 网络服务 (一)
查看>>
vs打包winform应用程序
查看>>
《摔跤吧,爸爸》观后感
查看>>
干货:用技术分析致敬老牌开源社群系统—ThinkSNS
查看>>
jq表单
查看>>
在不发生滚动情况下参考目标不同而获取光标位置
查看>>
做完和做好不一样
查看>>
CheckStyle安装与使用
查看>>
facebook 相关
查看>>
C语言指针强制类型转换
查看>>