遇到的坑:之前都是通过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>

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐