首页 > 解决方案 > 如何检测安卓应用程序中的慢速互联网连接

问题描述

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

现在他们已经弃用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();

标签: androidsignal-strengthandroid-connectivitymanager

解决方案


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

int signalStrength = networkCapabilities.getSignalStrength();

文件:

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

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

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

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

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

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

CellSignalStrengthLte用于LTE等。

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


推荐阅读