获取当前的网络连接带宽(WLAN / 3G)?

时间:2015-09-04 11:20:08

标签: android performance networking bandwidth

在应用中,我需要找出当前网络连接的当前(最大)带宽(WLAN / 3G / 4G)。

如何做到这一点?

上传小文件,如20kb左右不会是一个选项,因为我的网络速度可能不同于5MB,20MB或50MB文件,因为有效的网络上传/下载速度取决于文件大小。

上传大文件是另一种选择,但它需要多大,我需要多长时间检查当前的最大带宽?

我猜这不是某些关于系统当前连接(android)的东西。

我的想法是在应用程序使用时为应用程序提供此信息,这些信息也可以在后台运行。

2 个答案:

答案 0 :(得分:2)

Facebook有一个名为network-connection-class 的图书馆。

它提供了DeviceBandwidthSampler,您可以使用它来执行采样。它还提供ConnectionClassManager来通知您带宽质量(采样后)。

带宽质量信息在Connection Quality中定义。

答案 1 :(得分:2)

您可以使用ConnectivityManager获取网络信息。首先,您可以检查用户是否已连接到Wifi。如果他们使用移动无线电,您可以使用以下内容获取他们所连接的网络类型:

ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo activeNetwork = cm.getActiveNetworkInfo();

if( activeNetwork.getType() != ConnectivityManager.TYPE_WIFI)
{
    String typeName=activeNetwork.getSubtypeName()
    int type = activeNetwork.getSubtype ()
    switch(type)
    {
        // values are of type TelephonyManager.NETWORK_TYPE_* enums
    }
}

一个方便的查找表可以让您了解您正在处理的网络类型,以及期望的最佳带宽和延迟。

但实际上,这个价值会给你最好的情况;在野外,你会得到更糟糕的结果。即使您的用户可能在LTE网络上,用户可能会超过他们当月的数据上限,并因此受到限制连接。

这就是我希望始终为已知资产规模添加时间指标的原因。因此,如果您正在获取128x128缩略图,您(大致)知道它的大小是多少字节,并且根据上述信息,您可以猜测它的预期延迟时间。但是,您可以计算实际获取时间,并相应地调整指标。

正确地建立网络 更多地是编写适应网络条件的代码,而不是其他任何东西。