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

Har*_*hah 4 android signal-strength android-connectivitymanager

我想检测手机的互联网连接速度是慢速还是高速。

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

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

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

ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
        Network activeNetwork = cm.getActiveNetwork();
        NetworkCapabilities networkCapabilities = cm.getNetworkCapabilities(activeNetwork);
        int signalStrength = networkCapabilities.getSignalStrength();
Run Code Online (Sandbox Code Playgroud)

Zai*_*ain 5

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

\n
int signalStrength = networkCapabilities.getSignalStrength();\n
Run Code Online (Sandbox Code Playgroud)\n

文档:

\n
\n

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

\n
\n

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

\n
\n

RSSI 或 \xe2\x80\x9c 接收信号强度指示器,\xe2\x80\x9d 是衡量您的设备从接入点或路由器接收信号的能力的指标。它\xe2\x80\x99 是一个值,可用于确定是否有足够的信号来获得良好的无线连接。

\n
\n

因此,您需要将这些单位映射到某些质量指标,以了解信号是否弱/强。这是依赖于通信/信号而不是编程的观点...这个线程以及这个线程可能会在 WiFi 承载的情况下帮助你。

\n

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

\n

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

\n

CellSignalStrengthLte用于LTE等。

\n

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

\n