2012-02-27 7 views
10

Estoy comprobando la intensidad de la señal para dispositivos CDMA. ¿Alguien puede especificar el rango signalStrength.getCdmaDbm() devuelve ?. El valor más bajo es -120 pero para la potencia de la señal completa, ¿cuál es el valor? Lo más que tengo es -52.Rango para la señalFuerza en dbm para dispositivos CDMA

Respuesta

16

Bueno, no estoy seguro de si esto es lo que estás buscando, pero después de echar un vistazo al archivo SignalStrength.java en la fuente de Android noté un código que tiene un montón de niveles para cdma dbm y ecio.

DBM 
level 4 >= -75 
level 3 >= -85 
level 2 >= -95 
level 1 >= -100 

Ecio 
level 4 >= -90 
level 3 >= -110 
level 2 >= -130 
level 1 >= -150 

y el nivel es la más baja de las dos

actualLevel = (levelDbm < levelEcio) ? levelDbm : levelEcio; 

pero me di cuenta que esto no se corresponde con las barras reales que muestran en la notificación. Si está en 3G, este nivel se ignora y se usa la relación señal/ruido.

signalStrength.getEvdoSnr() // value is 0 to 8 so divide by two to get the bars 

si los datos se reducen de 3G a 1x y luego utilizan el actualLevel.

Este fue mi código para encontrar mostrar el número de barras.

public void onSignalStrengthsChanged(SignalStrength signalStrength) { 
     super.onSignalStrengthsChanged(signalStrength); 
     if (signalStrength.isGsm()) { 
      if (signalStrength.getGsmSignalStrength() != 99) 
       signalStrengthValue = signalStrength.getGsmSignalStrength() * 2 - 113; 
      else 
       signalStrengthValue = signalStrength.getGsmSignalStrength(); 
     } else { 
      final int snr = signalStrength.getEvdoSnr(); 
      final int cdmaDbm = signalStrength.getCdmaDbm(); 
      final int cdmaEcio = signalStrength.getCdmaEcio(); 
      int levelDbm; 
      int levelEcio; 
      int level = 0; 

      if (snr == -1) { 
       if (cdmaDbm >= -75) levelDbm = 4; 
       else if (cdmaDbm >= -85) levelDbm = 3; 
       else if (cdmaDbm >= -95) levelDbm = 2; 
       else if (cdmaDbm >= -100) levelDbm = 1; 
       else levelDbm = 0; 

       // Ec/Io are in dB*10 
       if (cdmaEcio >= -90) levelEcio = 4; 
       else if (cdmaEcio >= -110) levelEcio = 3; 
       else if (cdmaEcio >= -130) levelEcio = 2; 
       else if (cdmaEcio >= -150) levelEcio = 1; 
       else levelEcio = 0; 

       level = (levelDbm < levelEcio) ? levelDbm : levelEcio; 
      } else { 
       if (snr == 7 || snr == 8) level =4; 
       else if (snr == 5 || snr == 6) level =3; 
       else if (snr == 3 || snr == 4) level = 2; 
       else if (snr ==1 || snr ==2) level =1; 

      } 

      text.setText("Bars= " + level); 


     } 
    } 

en el uso del método de crear esta abajo, y también asegurarse de manifiesto utiliza READ_PHONE_STATE.

TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
    AndroidPhoneStateListener phoneStateListener = new AndroidPhoneStateListener(text); 
    telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); 
+0

¿Qué pasa si el teléfono es GSM. La variable "signalStrengthValue" es el valor de dBm. ¿Cómo calcular el valor de ECIO? – MCGBra

Cuestiones relacionadas