我想要检测手机的网络连接是否很慢或很高速。
现在他们已经弃用了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();发布于 2021-01-06 17:33:37
假设您认为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类。
发布于 2021-01-07 09:32:46
首先,这是一种直接的方法,而不是对问题的直接回答。
int signalStrength = networkCapabilities.getSignalStrength();文档:
这是一个带符号的整数,值越高表示信号越强。确切的单位依赖于持有者。例如,Wi-Fi使用wifi代码报告的相同RSSI单位。
这意味着signalStrength持有与信号承载相关的值;例如,如果承载是WiFi,则signalStrength将反映相同的WiFi RSSI单元。
RSSI或“接收信号强度指示器”是对您的设备收听来自接入点或路由器的信号的好坏的度量。这是一个有用的值,用于确定您是否有足够的信号来获得良好的无线连接。
因此,您需要将这些单位映射到一些质量指标,以了解信号是弱还是强。这是与通信/信号相关的,而不是编程的观点...在使用WiFi承载的情况下,This thread和this one可能会为您提供帮助。
但您需要根据其他类型的信号承载的RSSI单位对此质量级别进行同样的自定义。
例如,GSM信号,您可以使用具有getRssi()的CellSignalStrengthGsm
CellSignalStrengthLte适用于、LTE、等。
您还可以从android.telephony API的SignalStrength类中获得信号强度级别...有一个getLevel()方法,它返回一个从0到4的整数,表示一般的信号质量。Here你可以找到一个监听器。
https://stackoverflow.com/questions/65593185
复制相似问题