如何在android中找到GPRS/3G网络数据传输速度?
Posted
技术标签:
【中文标题】如何在android中找到GPRS/3G网络数据传输速度?【英文标题】:How to find the GPRS/3G network data transfer speed in android? 【发布时间】:2011-04-15 07:50:26 【问题描述】:在我的应用程序中,我需要找到已连接网络 (wifi/GPRS/3G) 的速度。在这里我需要帮助找到 GPRS/3G 网络的速度。你能帮我解决这个问题吗?
【问题讨论】:
【参考方案1】:这也不是一个完整的答案,但对于 Wifi 网络(不是蜂窝网络),您可以通过以下方式获取链接速率:
public String getLinkRate()
WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
WifiInfo wi = wm.getConnectionInfo();
return String.format("%d Mbps", wi.getLinkSpeed());
需要注意的几点:
-
这需要
android.permission.ACCESS_WIFI_STATE
权限。
它将始终是 802.11 标准指定的速率之一(请参阅table here)
这只是手机和AP协商的最大速率。许多因素都会影响您在上网时获得的实际速率(例如,无线拥塞和冲突、上行链路速率)
【讨论】:
【参考方案2】:TrafficStats 将完成这项工作。您可以获取传输的字节数,然后您可以计算速度。
【讨论】:
【参考方案3】:也许可以确定,该用户已连接到 wifi、gprs 或 g3 网络。 然后你可以计算出每种技术的速度有多快。您也可以将文件(例如 3MB)放在快速连接服务器上。然后您可以下载该文件并测量时间,需要多长时间。然后计算...或者您可以在文件下载时每秒计算一次。
下载速度也可能因各种条件而异。像网络强度(展位无线和移动)。例如,如果用户连接到 54mbit wifi 并且接入点距离用户 60 米,那么下载速度甚至不会是它的一半。 这是下载速度计算的示例java howto calculate Mbit/s during while loop download
【讨论】:
你也可以看到这个问题***.com/questions/8624828/…【参考方案4】:看看Zwitscher'sNetworkHelper class
基本上你需要获取ConnectivityManager
cManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
然后在此查询您想知道的内容
NetworkInfo info = cManager.getActiveNetworkInfo();
int type = info.getType();
int subType = info.getSubtype();
更多信息,请浏览上面的类,看看type
和subType
的含义。
【讨论】:
您好 Heiko Rupp 感谢您的回答。但是这里 getType() 返回网络连接的类型(Wifi/mobile),而 getSubType() 返回连接网络的子类型(如果有)。这些对于查找移动网络速度没有用。 这个答案可能有助于确定预期或最大速率是多少(基于网络类型),但对于确定当前/可用速率是多少毫无帮助。蜂窝数据传输速率的变化太大,如果需要考虑准确性,这将没有多大用处。以上是关于如何在android中找到GPRS/3G网络数据传输速度?的主要内容,如果未能解决你的问题,请参考以下文章