【问题标题】:On Android/Java, how many bytes has a connection downloaded?在 Android/Java 上,一个连接下载了多少字节?
【发布时间】:2011-01-17 09:26:21
【问题描述】:

我正在编写的 Android 应用程序涉及大量内容下载(想想 podcatcher/RSS)。

我希望能够让用户知道他们下载了多少字节,这样他们就可以决定是否要使用 Wifi。

为此,我找到了一种计算应用程序读取字节数的方法,方法是将InputStream 包装在一个简单的CountingInputStream 中。

但是,这并未考虑数据包标头和 HTTP 标头等基本内容。更重要的是,它没有考虑对内容进行编码的任何压缩。

那么,我的应用程序通过网络下载了多少字节?我对上传的字节数不太感兴趣,但如果知道如何,请不要害羞。

在将输入流输入 XML PullParser 时,我采用了一种相当低级的方法。我还需要做一个类似的练习,将字节(在这种情况下为图像)直接转储到 SD 卡上。

这是最好的方法吗?我错过了什么?

【问题讨论】:

    标签: java android inputstream billing urlconnection


    【解决方案1】:

    ufff... 我认为这对底层协议非常透明,因此您无法计算会话或链路层中使用的所有这些字节,并且运营商甚至喜欢对以任何方式不可见的控制字节收费最终用户。他们还计算两个方向的流量(您对服务器的请求也需要一些),所以 - 好问题是:如何衡量下载该图片所需的流量/资金......?

    【讨论】:

      【解决方案2】:

      这不是一个直接的答案,但您可以尝试询问以前解决过类似问题的人,例如数据计数器应用程序。我使用过 Cyril Jaquier (http://www.jaqpot.net/netcounter/) 的 NetCounter,他声称他的软件是开源的。我无法获取他的下载链接,但有一个联系电子邮件地址。如果你有他的源代码,你应该可以使用和他一样的方法。

      【讨论】:

      • 这使用 /sys/class/net/${interface}/statistics/rx_bytes 这是:系统范围(我需要特定于应用程序);和平台特定 - 您引用的应用程序必须解决移植问题。总而言之,一个很好的建议,但对于我的目的来说,可能层太低了。谢谢。
      【解决方案3】:

      据我所知,有两种方法可以计算数据流量。一个是 /sys/class/net/{interface}/statistics,在名为 netCounter 的 Android 应用中提到,另一个是 /proc/net/dev,在名为 wifi-tether 的 Android 应用中使用。但是我不知道这两种方法有什么区别,也不知道哪个更好。

      【讨论】:

        【解决方案4】:

        特定应用接收的字节数存储在 /proc/uid_stat//tcp_rcv 中,其中 app_uid 是特定设备上您的应用的 uid。

        【讨论】:

        • 谢谢。一定会检查一下。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多