首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android:如何以编程方式确定android中的网络速度

Android:如何以编程方式确定android中的网络速度
EN

Stack Overflow用户
提问于 2019-03-14 09:55:28
回答 8查看 47.5K关注 0票数 22

如何在网络连接时向用户显示缓慢的互联网连接注意:非网络类型(2G、3G、4G、WIFI)

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2019-03-14 11:46:23

确定您的网络速度-(慢互联网速度)

使用NetworkInfo类、ConnectivityManager和TelephonyManager确定网络类型。

从互联网下载任何文件&计算它花了多长时间与文件中的字节数。(确定速度检查的唯一可能方法)

我尝试了下面的逻辑为我的项目,你也看过这个,希望它能帮助你。

代码语言:javascript
运行
复制
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    //should check null because in airplane mode it will be null
    NetworkCapabilities nc = cm.getNetworkCapabilities(cm.getActiveNetwork());
    int downSpeed = nc.getLinkDownstreamBandwidthKbps();
    int upSpeed = nc.getLinkUpstreamBandwidthKbps();
票数 19
EN

Stack Overflow用户

发布于 2019-03-14 10:16:29

检查移动网络使用此代码的internet速度

代码语言:javascript
运行
复制
ConnectivityManager connectivityManager = (ConnectivityManager)this.getSystemService(CONNECTIVITY_SERVICE);
NetworkCapabilities nc = connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
var downSpeed = nc.getLinkDownstreamBandwidthKbps();
var upSpeed = nc.getLinkUpstreamBandwidthKbps();

如果检查wifi网络使用此代码的internet速度

代码语言:javascript
运行
复制
public int getWifiLevel()
{
    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    int linkSpeed = wifiManager.getConnectionInfo().getRssi();
    int level = WifiManager.calculateSignalLevel(linkSpeed, 5);
    return level;
}

更多细节请参阅此链接。

https://android.jlelse.eu/designing-android-apps-to-handle-slow-network-speed-dedc04119aac

我希望这能帮到你!

谢谢。

票数 8
EN

Stack Overflow用户

发布于 2019-03-14 10:06:43

需要最低api:21。我使用ConnectivityManagerNetworkCapabilities相结合来获得下游和上游的带宽。效果很好。您可以根据以kbps为单位的速度来决定速度是2G、3G还是4G级别。

代码语言:javascript
运行
复制
ConnectivityManager cm = (ConnectivityManager)this.getSystemService(CONNECTIVITY_SERVICE);
NetworkCapabilities nc = cm.getNetworkCapabilities(cm.getActiveNetwork());
var downSpeed = nc.getLinkDownstreamBandwidthKbps();
var upSpeed = nc.getLinkUpstreamBandwidthKbps();
  • 2G GSM ~14.4Kbps
  • GPRS ~26.8Kbps
  • E边~108.8 Kbps
  • 3G UMTS ~128 Kbps
  • HSPA ~3.6Mbps
  • H+ HSPA+ ~14.4Mbps-23.0Mbps
  • 4G LTE ~50 Mbps
  • 4G LTE-A ~500 Mbps

下载一个文件是过度工程的解决方案,因为毕竟,你没有责任的用户互联网连接-他们是(或者更确切地说,他们的服务提供商是!)对大多数用例来说,根据它们当前的状态提供信息已经足够了。这为您在执行操作之前快速检查当前链路速度提供了一种方法。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55159487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档