Question

Je suis en train d'utiliser le Wifimanager pour calculer le niveau de signal des points d'accès lors d'une analyse.

J'utilise la méthode suivante:

WifiManager.calculateSignalLevel (int, int)

Mais il semble revenir toujours le même entier quel que soit le niveau RSSI est.

Voici mon code:


public int calculateQoS(int aRSSI){

    signalLevel = WifiManager.calculateSignalLevel(RSSI, 5);

    return signalLevel;

}

public void testCalculateQoS(){

            Log.d("signal", "signal = : "
                    + connMonitor.calculateQoS(-44)
                    + " " + connMonitor.calculateQoS(-80)
                    + " " + connMonitor.calculateQoS(-120)
                    + " " + connMonitor.calculateQoS(-20));

        }

Les sorties de journalisation 1 pour tous les cas de test pour calculateQoS (int).

Suis-je manque ici quelque chose simple? Pourquoi le SignalLevel toujours 1?

Était-ce utile?

La solution

Il semble que calculateSignalLevel est mis en œuvre ainsi:

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;
  }
}

Peut-être que cet extrait de code peut expliquer votre problème. Note également:

http://code.google.com/p/android/ questions / détail? id = 2555

Autres conseils

grâce à cette question que je pourrais éviter problème sur les versions de l'API bas alors celui que je suis ciblage. Donc, je fait ce que vous pouvez l'utiliser sur une version de la plate-forme.

public int getWifiSignalStrength(Context context){
    int MIN_RSSI        = -100;
    int MAX_RSSI        = -55;  
    int levels          = 101;
    WifiManager wifi    = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);            
    WifiInfo info       = wifi.getConnectionInfo(); 
    int rssi            = info.getRssi();

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH){
        return WifiManager.calculateSignalLevel(info.getRssi(), levels);
    } else {             
        // this is the code since 4.0.1
        if (rssi <= MIN_RSSI) {
            return 0;
        } else if (rssi >= MAX_RSSI) {
            return levels - 1;
        } else {
            float inputRange = (MAX_RSSI - MIN_RSSI);
            float outputRange = (levels - 1);
            return (int)((float)(rssi - MIN_RSSI) * outputRange / inputRange);
        }
    }
}//end method

Ce problème est que dans Android 2.3,
vous pouvez le remplacer par le dernier code de WiFiManger d'un androïde 4.2

Voici le code:

public 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);
        if(inputRange != 0)
            return (int) ((float) (rssi - MIN_RSSI) * outputRange / inputRange);
    }
    return 0;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top