在应用中,我需要找出当前网络连接的当前(最大)带宽(WLAN / 3G / 4G)。
如何做到这一点?
上传小文件,如20kb左右不会是一个选项,因为我的网络速度可能不同于5MB,20MB或50MB文件,因为有效的网络上传/下载速度取决于文件大小。
上传大文件是另一种选择,但它需要多大,我需要多长时间检查当前的最大带宽?
我猜这不是某些关于系统当前连接(android)的东西。
我的想法是在应用程序使用时为应用程序提供此信息,这些信息也可以在后台运行。
答案 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缩略图,您(大致)知道它的大小是多少字节,并且根据上述信息,您可以猜测它的预期延迟时间。但是,您可以计算实际获取时间,并相应地调整指标。
正确地建立网络 更多地是编写适应网络条件的代码,而不是其他任何东西。