在Android上如何测量数据漫游流量?

7
我刚从冰岛度过一段非常愉快的假期,现在等待手机公司的数据漫游账单。我尽可能地限制了流量,希望一切顺利,但我想提前了解。我使用了非常好的应用NetCounter,但它根本没有测量漫游数据流量。
因此,我想建立自己的应用程序,仅测量漫游数据流量。我有一些布尔值可以开始(NetworkInfo.IsRoaming()TelephonyManager.isNetworkRoaming()),但我不确定如何在true时测量流量。
因此,问题是:我如何在漫游时测量数据流量? (我想要类似于API级别8 TrafficStats功能,但适用于API级别3)。 使用的智能手机是Samsung Galaxy i7500(Android 1.6)

感谢您的时间!


1
NetCounter对我来说可以很好地测量数据漫游流量;我不认为它能区分漫游或非漫游。 - Christopher Orr
很奇怪...我在三星Galaxy i7500(SDK 4 Android 1.6)上使用NetCounter,在旅行前它在我的家庭网络上运作良好。当数据漫游时,什么也没有发生-每次测量都只显示0。回到家庭网络后,它又可以正常工作了。这可能是由于三星的硬件问题吗? - Benny Skogberg
1
我知道这个应用程序,NetMeter,也许你可以从它的代码中借鉴一些经验!=)http://code.google.com/p/android-labs/wiki/NetMeter - Shouvik
谢谢Shouvik,我已经下载了它,在Roam时会尝试一下 :) - BR - Benny Skogberg
1
当你完成这个应用程序时,我很想使用它。如果你需要一位测试者,告诉我们哦! - Paul Lammertsma
谢谢Paul...我发现有这个需求,即使这个问题还没有真正的答案,我也会解决它。当我有了可用的东西时,我很乐意让你成为测试人员。敬礼 - - Benny Skogberg
2个回答

9

方法一:解析“/proc/net/dev”文件。

在我的手机上,它看起来像这样:

Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    lo:     712       8    0    0    0     0          0         0      712       8    0    0    0     0       0          0
dummy0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
rmnet0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
rmnet1:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
rmnet2:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
 wlan0:  146112     423   32    0    0     0          0         0    42460     409    0    0    0     0       0          0

在我的手机中,“rmnet0”行是包含移动数据网络统计信息的行。我希望它的格式不会因为内核版本的不同而有所变化。
方法2:解析“/sys/class/net”。
我猜这是推荐的方法。如此所示:http://www.jaqpot.net/svn/android/netcounter/trunk/src/net/jaqpot/netcounter/service/SysClassNet.java

使用Astro,/proc/net/dev/sys/class/net目录下的所有文件都是0字节的空文件。这些文件在手机运行时可以访问吗?还是只有Astro无法访问?(摩托罗拉Droid,2.1-u1) - Paul Lammertsma
没事了,看起来只是Astro。我可以在另一个应用程序中打开这些文件。我想你可以偶尔轮询这个文件(或文件),并统计自上次轮询以来的结果。 - Paul Lammertsma
这对我来说真是个好消息。谢谢你把这个解释清楚给我!祝好! - Benny Skogberg

3

在评论中提到了几个开源选项:

我目前安装的是3G Watchdog。AndroLib上有一些作者的评论表明他不愿意发布源代码,但是在社区的帮助下,我相信我们可以合作打造最好的数据使用应用程序。

我认为最好的解决方案是采用NetMeter的代码并在后台运行服务。 3G Watchdog就是这样做的(该服务称为net.NetMonitorService)。


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