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

问题描述

我想检测手机的网络连接速度是慢还是网络速度快。

现在他们已弃用 NetworkInfo 并建议我们应该使用 ConnectivityManager#getNetworkCapabilities 使用它我能够获得信号强度但无法弄清楚如何使用 {{1} 返回的整数值}

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

这是我获取信号强度的代码

networkCapabilities.getSignalStrength()

解决方法

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

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 类以获得更多此类常量值。

,

首先,这是一种指导性方法,而不是直接回答问题。

int signalStrength = networkCapabilities.getSignalStrength();

文档:

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

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

RSSI,即“接收信号强度指示器”,衡量您的设备接收来自接入点或路由器的信号的能力。该值可用于确定您是否有足够的信号来获得良好的无线连接。

因此,您需要将这些单位映射到某个质量指标,以了解信号是否弱/强。这是通信/信号相关的,而不是编程的观点...... This threadthis one 也可以在 WiFi 承载的情况下帮助您。

但是您需要根据其 RSSI 单位为其他类型的信号承载同样定制此质量级别。

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

getRssi()

CellSignalStrengthLte 用于 LTE 等。

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