2

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

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

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

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

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

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

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

4

4 回答 4

1

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

于 2010-11-17T10:05:04.847 回答
1

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

于 2010-02-16T12:55:55.203 回答
1

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

于 2010-02-16T13:24:36.013 回答
0

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

于 2013-01-19T10:05:59.640 回答