【问题标题】:Get current bandwidth of network connection (WLAN/3G)?获取网络连接的当前带宽(WLAN/3G)?
【发布时间】:2015-11-30 12:57:00
【问题描述】:

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

如何做到这一点?

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

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

我猜这不是系统(android)当前连接的某个地方已经可用的东西。

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

【问题讨论】:

    标签: android performance networking bandwidth


    【解决方案1】:

    Facebook 有一个名为 network-connection-class 的库。

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

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

    【讨论】:

      【解决方案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
          }
      }
      

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

      但实际上,该值为您提供了 BEST CASE 场景;在野外,你会得到更糟糕的结果。看看即使您的用户可能在 LTE 网络上,该用户也可能超出了当月的数据上限,因此连接受到限制。

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

      让网络正确更多地与编写适应网络条件的代码有关,而不是其他任何事情。

      【讨论】:

        猜你喜欢
        • 2012-06-13
        • 1970-01-01
        • 1970-01-01
        • 2014-05-27
        • 2011-06-08
        • 2012-07-25
        • 2015-09-16
        • 2012-03-05
        • 2015-11-09
        相关资源
        最近更新 更多