如何以编程方式获得链接速度?

时间:2010-12-13 14:07:32

标签: java android networking

我正在开发一个应用程序,它几乎完成除了一件事:我不知道如何获得链接速度并将其放在状态栏中。我是Java的新手,所以如果有人可以帮助我,我会非常感激 附:抱歉英语不好。

3 个答案:

答案 0 :(得分:34)

正如回复者所说,你的问题不是很明确。您可能指的是链路连接速度(即高达54 Mbps,信号接收良好Wifi或全速HSDPA高达7.2 Mbps),具体取决于:

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

在这种情况下,我担心没有标准的Java API方法可以了解它,但Android API需要的功能:

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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