我该如何检查我的安卓应用程序的网络流量消耗?

33

我需要检查我的Android应用程序的网络使用情况。在我的应用程序中,我调用了许多Web服务API。

我想知道我的应用程序在完全运行时消耗的互联网流量是多少(以kB/MB为单位)。

我该如何检查呢?有什么工具可以用来检查吗?


1
自从 Stack Overflow 推出以来已经有 7 年了,为什么这样一个简单的问题还没有被认定为重复? - Peter Mortensen
@PeterMortensen 实际上我已经标记为重复,但所有问题都是关于如何通过编程获取网络数据使用情况,但在这个问题中,OP问“如何使用一些工具来获取它?” - M D
4个回答

26

Android Studio 2.0引入了新的Network部分在Android Monitor中,它可以帮助你解决问题。

enter image description here

Tx == Transmit Bytes Rx == Receive Bytes

10
我知道这是一个老问题,但是如何使用这个工具来获取一段时间内的总使用兆字节数?图表只显示特定时间点的传输速率,而不是到目前为止已传输的总数。我希望我可以只标记图表上的一个部分并获得总和,但很遗憾没有成功。 - Konaras

11

有三种方法可以查看应用程序的数据使用情况...

  1. 您可以在设备/模拟器中查看。转到设置->数据使用情况,并在列表中找到您的应用程序 在此输入图像描述

  2. 在Eclipse中,选择DDMS(透视图)->从设备中选择您的包->单击网络统计选项卡->单击开始 在此输入图像描述

  3. 如已经回答的那样,在Android Studio中,转到Android Monitor (底部标签)-> Network (选项卡)-> 查找 Tx (传输数据) / Rx (接收数据) 在此输入图像描述


8

为了查看目的,您可以按照MD提到的方式在监视器中检查它。

为了存储,您可以以编程方式实现。

    int UID = android.os.Process.myUid();
    rxBytes += getUidRxBytes(UID);
    txBytes += getUidTxBytes(UID);
    /**
     * Read UID Rx Bytes
     *
     * @param uid
     * @return rxBytes
     */
    public Long getUidRxBytes(int uid) {
        BufferedReader reader;
        Long rxBytes = 0L;
        try {
            reader = new BufferedReader(new FileReader("/proc/uid_stat/" + uid
                    + "/tcp_rcv"));
            rxBytes = Long.parseLong(reader.readLine());
            reader.close();
        }
        catch (FileNotFoundException e) {
            rxBytes = TrafficStats.getUidRxBytes(uid);
            //e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return rxBytes;
    }

    /**
     * Read UID Tx Bytes
     *
     * @param uid
     * @return txBytes
     */
    public Long getUidTxBytes(int uid) {
        BufferedReader reader;
        Long txBytes = 0L;
        try {
            reader = new BufferedReader(new FileReader("/proc/uid_stat/" + uid
                    + "/tcp_snd"));
            txBytes = Long.parseLong(reader.readLine());
            reader.close();
        }
        catch (FileNotFoundException e) {
            txBytes = TrafficStats.getUidTxBytes(uid);
            //e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return txBytes;
    }
}

2
很好的示例,它帮助了我很多。 - Thirumalvalavan
自从Android 6以后就无法工作。 - T.Coutlakis

6
请看:Android Monitor
在其中有许多主题可以监控。

您将找到网络监视器

在网络监视器中显示运行的应用程序: 请按照以下步骤操作:
  • 连接硬件设备。
  • 显示Android Monitor。
  • 单击“Network”选项卡。
  • 打开一个应用程序项目并在硬件设备上运行它。
  • 要启动网络监视器,请单击暂停暂停图标以取消选择。
任何网络流量都开始出现在网络监视器中: Enter image description here 网络监视器累加了设备传输和接收千字节数据所需的时间。 y轴以每秒千字节为单位。 x轴从秒开始,然后是分钟和秒,依此类推。
  • 要停止网络监视器,请再次单击暂停暂停图标以选择它。
参考:Android Monitor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接