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

解决方案 »

  1.   

    事实上,这个信号的强度应该根据不同硬件厂商自己的参数定下来。也就是说如果硬件厂商要进行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;
            }
        }
      

  2.   

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

  3.   

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