首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在android应用程序中检测缓慢的互联网连接

如何在android应用程序中检测缓慢的互联网连接
EN

Stack Overflow用户
提问于 2021-01-06 17:25:03
回答 2查看 243关注 0票数 2

我想要检测手机的网络连接是否很慢或很高速。

现在他们已经弃用了NetworkInfo,并建议我们使用ConnectivityManager#getNetworkCapabilities。我可以得到信号强度,但不知道如何使用networkCapabilities.getSignalStrength()返回的整数值

它返回一个整数值,我得到了这些值(-39,-71,-31)。我的问题是,我们应该如何定义信号强度是好的还是差的。

下面是我获取信号强度的代码:

代码语言:javascript
复制
ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
        Network activeNetwork = cm.getActiveNetwork();
        NetworkCapabilities networkCapabilities = cm.getNetworkCapabilities(activeNetwork);
        int signalStrength = networkCapabilities.getSignalStrength();
EN

回答 2

Stack Overflow用户

发布于 2021-01-06 17:33:37

假设您认为2G很慢,您可以按如下方式确定2G网络

代码语言:javascript
复制
NetworkInfo network = connectivity.getActiveNetworkInfo();
int netSubType = network.getSubtypeName();
if(netSubType == TelephonyManager.NETWORK_TYPE_GPRS ||
    netSubType == TelephonyManager.NETWORK_TYPE_EDGE ||
    netSubType == TelephonyManager.NETWORK_TYPE_1xRTT) {
  //user is in slow network
}

有关此类常量值的更多信息,请参见TelephonyManager类。

票数 1
EN

Stack Overflow用户

发布于 2021-01-07 09:32:46

首先,这是一种直接的方法,而不是对问题的直接回答。

代码语言:javascript
复制
int signalStrength = networkCapabilities.getSignalStrength();

文档:

这是一个带符号的整数,值越高表示信号越强。确切的单位依赖于持有者。例如,Wi-Fi使用wifi代码报告的相同RSSI单位。

这意味着signalStrength持有与信号承载相关的值;例如,如果承载是WiFi,则signalStrength将反映相同的WiFi RSSI单元。

RSSI或“接收信号强度指示器”是对您的设备收听来自接入点或路由器的信号的好坏的度量。这是一个有用的值,用于确定您是否有足够的信号来获得良好的无线连接。

因此,您需要将这些单位映射到一些质量指标,以了解信号是弱还是强。这是与通信/信号相关的,而不是编程的观点...在使用WiFi承载的情况下,This threadthis one可能会为您提供帮助。

但您需要根据其他类型的信号承载的RSSI单位对此质量级别进行同样的自定义。

例如,GSM信号,您可以使用具有getRssi()CellSignalStrengthGsm

CellSignalStrengthLte适用于、LTE、等。

您还可以从android.telephony API的SignalStrength类中获得信号强度级别...有一个getLevel()方法,它返回一个从0到4的整数,表示一般的信号质量。Here你可以找到一个监听器。

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

https://stackoverflow.com/questions/65593185

复制
相关文章

相似问题

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