android wifi 信号强度

时间:2021-01-22 14:43:27
最近测试了一下wifi强度值发现一般都是在50~65dBm之间徘徊,到网上查了发现这个值已经是接近完美的了,
我现在迷惑的是机器上显示信息强度是1~4格图标,那这个是怎么根据wifi强度值划分的呢?

10 个解决方案

#1


那你自能看看系统的代码了

#2


有难度!

#3


引用 1 楼 ultrapro 的回复:
那你自能看看系统的代码了

难道没有一个标准的强度等级划分

#4


事实上,这个信号的强度应该根据不同硬件厂商自己的参数定下来。

也就是说如果硬件厂商要进行Android移植开发,他应该根据自己采用的wifi硬件来修改这块代码(尤其是MIN_RSSI和MAX_RSSI),否则用户看到的wifi信号强弱格数会不对的。

这个是有计算公式的,给你一个参考方向吧

以下是原生Froyo版本Android中 frameworks\base\wifi\java\android\net\wifi\WifiManager.java
中一段代码。

    /**
     * Calculates the level of the signal. This should be used any time a signal
     * is being shown.
     * 
     * @param rssi The power of the signal measured in RSSI.
     * @param numLevels The number of levels to consider in the calculated
     *            level.
     * @return A level of the signal, given in the range of 0 to numLevels-1
     *         (both inclusive).
     */
    public static int calculateSignalLevel(int rssi, int numLevels) {
        if (rssi <= MIN_RSSI) {
            return 0;
        } else if (rssi >= MAX_RSSI) {
            return numLevels - 1;
        } else {
            int partitionSize = (MAX_RSSI - MIN_RSSI) / (numLevels - 1);
            return (rssi - MIN_RSSI) / partitionSize;
        }
    }

#5


引用 4 楼 seker_xinjian 的回复:
事实上,这个信号的强度应该根据不同硬件厂商自己的参数定下来。

也就是说如果硬件厂商要进行Android移植开发,他应该根据自己采用的wifi硬件来修改这块代码(尤其是MIN_RSSI和MAX_RSSI),否则用户看到的wifi信号强弱格数会不对的。

这个是有计算公式的,给你一个参考方向吧

以下是原生Froyo版本Android中 frameworks\base\wifi\jav……

学习了 

#6


是的,在wifiManager裡

#7


该回复于2011-04-25 09:11:05被版主删除

#8


  扫描到wifi热点后,未连接 获取信号强度使用ScanResult.level 这个返回的是一个负数   连接wifi热点成功后 ,获取信号强度用 wifiinfo.getRssi() 来判断 这个返回的也是一个负数      这两个有扫描区别没有?

#9


学习了

#10


那如何获取wifi的信号强度呢?是不是只有绑定监听器一种方式?如果绑定监听器,是不是在信号稳定的情况下是没法获取的啊?

#1


那你自能看看系统的代码了

#2


有难度!

#3


引用 1 楼 ultrapro 的回复:
那你自能看看系统的代码了

难道没有一个标准的强度等级划分

#4


事实上,这个信号的强度应该根据不同硬件厂商自己的参数定下来。

也就是说如果硬件厂商要进行Android移植开发,他应该根据自己采用的wifi硬件来修改这块代码(尤其是MIN_RSSI和MAX_RSSI),否则用户看到的wifi信号强弱格数会不对的。

这个是有计算公式的,给你一个参考方向吧

以下是原生Froyo版本Android中 frameworks\base\wifi\java\android\net\wifi\WifiManager.java
中一段代码。

    /**
     * Calculates the level of the signal. This should be used any time a signal
     * is being shown.
     * 
     * @param rssi The power of the signal measured in RSSI.
     * @param numLevels The number of levels to consider in the calculated
     *            level.
     * @return A level of the signal, given in the range of 0 to numLevels-1
     *         (both inclusive).
     */
    public static int calculateSignalLevel(int rssi, int numLevels) {
        if (rssi <= MIN_RSSI) {
            return 0;
        } else if (rssi >= MAX_RSSI) {
            return numLevels - 1;
        } else {
            int partitionSize = (MAX_RSSI - MIN_RSSI) / (numLevels - 1);
            return (rssi - MIN_RSSI) / partitionSize;
        }
    }

#5


引用 4 楼 seker_xinjian 的回复:
事实上,这个信号的强度应该根据不同硬件厂商自己的参数定下来。

也就是说如果硬件厂商要进行Android移植开发,他应该根据自己采用的wifi硬件来修改这块代码(尤其是MIN_RSSI和MAX_RSSI),否则用户看到的wifi信号强弱格数会不对的。

这个是有计算公式的,给你一个参考方向吧

以下是原生Froyo版本Android中 frameworks\base\wifi\jav……

学习了 

#6


是的,在wifiManager裡

#7


该回复于2011-04-25 09:11:05被版主删除

#8


  扫描到wifi热点后,未连接 获取信号强度使用ScanResult.level 这个返回的是一个负数   连接wifi热点成功后 ,获取信号强度用 wifiinfo.getRssi() 来判断 这个返回的也是一个负数      这两个有扫描区别没有?

#9


学习了

#10


那如何获取wifi的信号强度呢?是不是只有绑定监听器一种方式?如果绑定监听器,是不是在信号稳定的情况下是没法获取的啊?