2010-12-13 59 views
7

我正在开发一个应用程序,除了一件事情之外,它几乎完成:我不知道如何获得链接速度并将其置于状态栏中。我是Java新手,如果有人可以帮助我,我会非常感谢。 P.S.对不起,英文不好。如何以编程方式获取链接速度?

+1

什么是链接速度应该是? – 2010-12-13 14:10:47

+0

您的意思是带宽下载速度?或者你可能会提到一个不确定的进度条? – Franco 2010-12-13 14:11:55

+0

你想知道互联网连接能够下载多快吗?或者现在它下载速度有多快?还是其他什么东西? – 2010-12-13 15:03:42

回答

34

正如提问者所建议的那样,您的问题并不十分清楚。您可以指链路连接速度(即高达54 Mbps,具有良好的信号接收Wifi或高达7.2 Mbps的全速HSDPA),这取决于:

  • 你正在使用的网络接口时间。某些电话允许共享,这意味着您可以同时启用Wifi和移动数据链路(GPRS/3G/HSDPA)或自动切换(如果您的Wifi连接断开,您的电话将自动切换到移动网络(如果激活))。
  • 连接速度在时间协商。取决于信号质量/运营商网络配置(有些具有最大速度限制)/移动数据合同(每月带宽配额通常意味着默认为GPRS速度)。

在这种情况下,恐怕没有标准Java API的方法来知道它,但Android的API所需的功能:

  • 对于无线网络链接速度检查WifiInfo.getLinkSpeed()
  • 移动数据链接我担心你只能检查TelefonyManager.getNetworkType()来确定当前的移动数据链路类型。然后您应该通过链路类型接近实际速度(即,对于高达128 kbps的GPRS,对于高达236.8 kpbs的EDGE,对于高达2 Mbps的3G,对于高达7.2 Mbps的HSDPA)。考虑到这只是一个aproximation。您可能使用HSDPA连接,但您的运营商将最高速度限制为2 Mbps。

在您参考当前(下载/上传)数据链路速度这是只适用于较高水平,实际测量而不是链接速度,但你的手机和服务器之间的速度其他情况下,这不仅取决于你的链接速度,还取决于许多其他因素(手机和服务器之间的所有链接,服务器本身等)。您可以测量“HTTP级别速度”,这意味着HTTP数据速度(不考虑数据包的开销流量),因为通常只有HTTP连接在每种情况下都受支持(您的运营商可能会隐藏您的代理,将所有内容过滤掉,但HTTP交通)。

如果您使用的是8级API,还可以使用名为TrafficStats的有趣功能。这可以让您知道手机通过移动数据链路交换的低级别的发送/接收数据包,该数据包可能只提供您在哪里查找的信息(使用这些测量和经过的时间,您可以轻松地测量当前/平均使用的数据链接速度)。

+0

感谢您的快速响应 – 4yBAk 2010-12-13 16:26:40

+0

您可以通过检测3G连接速度了解更多细节吗?当我输出TelefonyManager.getNetworkType()时,它返回“CONNECTED”,而不是特定的电话类型。 – worked 2011-12-08 20:10:26

2

你不能直接说出来。您必须询问底层的操作系统。对于OS X,您可以在相应的网络端口上解析“/ sbin/ifconfig”的输出。

1

您也可以使用JNI编写扩展名,并使用C来询问连接速度。如果您不想解析来自其他应用程序的输出,但请记住此解决方案不可移植。

相关问题