如何在Android 11以下版本中通过WifiManager获取网络信号强度?
Android SDK 30以下设备计算WiFi信号强度的方案
直接使用旧版API
SDK 30(Android 11)以下的设备中,WifiManager.calculateSignalLevel(int rssi, int numLevels)方法并未被弃用,可以直接调用。其中rssi是获取到的WiFi信号强度值,numLevels是你需要划分的信号等级数量(比如你之前用到的5级)。自定义信号强度计算逻辑
如果不想依赖系统API,也可以自己实现信号强度的等级映射逻辑,逻辑和系统旧API大致一致。比如将RSSI值(通常范围在-100dBm到-50dBm之间)映射为0到指定等级数-1的数值:private int calculateWifiSignalLevel(int rssi, int numLevels) { if (rssi <= -100) { return 0; } else if (rssi >= -50) { return numLevels - 1; } else { float inputInterval = (-50) - (-100); float outputInterval = numLevels - 1; return (int) ((rssi - (-100)) * outputInterval / inputInterval); } }兼容性代码示例
如果你需要同时兼容SDK 30以上和以下的设备,可以通过版本判断来选择对应的实现:WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); int rssi = ...; // 从WifiInfo中获取的RSSI值 int signalLevel; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { signalLevel = wifiManager.calculateSignalLevel(rssi); } else { // 选择旧版API或自定义方法 signalLevel = wifiManager.calculateSignalLevel(rssi, 5); // signalLevel = calculateWifiSignalLevel(rssi, 5); }
内容的提问来源于stack exchange,提问作者Malik
相关产品推荐
相关产品推荐

