• 安卓App流量统计


    http://keepcleargas.bitbucket.org/2013/10/12/android-App-Traffic.html

    安卓App流量统计

    12 OCT 2013

    android流量简介

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

    流量统计图片

    如上图: lo 为本地流量, rmnet0 为3g/2g流量, wlan0 为无线流量.

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

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

    TrafficStats学习

    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);

    拓展阅读

  • 相关阅读:
    算法经典文章收藏
    Python 学习文章收藏
    Leetcode 刷题计划
    CLR via C# 学习计划
    算法导论 学习计划
    算法导论学习笔记 一 分治算法
    Mongodb 学习笔记
    Python模拟HttpRequest的方法总结
    在Github上搭建自己的博客(Windows平台)
    Git Shell 基本命令(官网脱水版)
  • 原文地址:https://www.cnblogs.com/wanqieddy/p/4758020.html
Copyright © 2020-2023  润新知