android R 修改wifi信号强度
遇到的坑:之前都是通过java代码来判断wifi的信号强度的,但是现在修改完成后,验证没有生效;
frameworks/base/wifi/java/android/net/wifi/WifiManager.java
@Deprecated
public static int calculateSignalLevel(int rssi, int numLevels) {
if (rssi <= MIN_RSSI) {
return 0;
} else if (rssi >= MAX_RSSI) {
return numLevels - 1;
} else {
float inputRange = (MAX_RSSI - MIN_RSSI);
float outputRange = (numLevels - 1);
return (int)((float)(rssi - MIN_RSSI) * outputRange / inputRange);
}
}
解决方案:现在通过wifi的配置文件来进行比较返回的信号强度等级
frameworks/base/wifi/java/android/net/wifi/WifiManager.java
public int calculateSignalLevel(int rssi) {
try {
return mService.calculateSignalLevel(rssi);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
frameworks/opt/net/wifirvice/java/com/androidrver/wifi/WifiServiceImpl.java
@Override
public int calculateSignalLevel(int rssi) {
return RssiUtil.calculateSignalLevel(mContext, rssi);
}
frameworks/opt/net/wifirvice/java/com/androidrver/wifi/util/RssiUtil.java
public static int calculateSignalLevel(Context context, int rssi) {
int[] thresholds = getRssiLevelThresholds(context);
for (int level = 0; level < thresholds.length; level++) {
if (rssi < thresholds[level]) {
return level;
}
}
return thresholds.length;
}
@NonNull private static int[] getRssiLevelThresholds(Context context) {
// getIntArray() will never return null, it will throw instead
return context.getResources().getIntArray(R.array.config_wifiRssiLevelThresholds);
}
frameworks/opt/net/wifi/service/res/values/config.xml
<integer-array translatable="false" name="config_wifiRssiLevelThresholds">
<!-- RSSI RSSI Level -->
<item>-88</item> <!-- (-infinity, -88) 0 -->
<item>-77</item> <!-- [-88, -77) 1 -->
<item>-66</item> <!-- [-77, -66) 2 -->
<item>-55</item> <!-- [-66, -55) 3 -->
<!-- [-55, +infinity) 4 -->
</integer-array>
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/MiaoYeDeng/article/details/120891042