2012-02-27 16 views
10

Controllo la potenza del segnale per i dispositivi CDMA. Qualcuno può specificare il range signalStrength.getCdmaDbm() restituisce ?. Il valore più basso è -120 ma per la piena potenza del segnale qual è il valore? Il più alto che ho ottenuto è -52.Intervallo per signalStrength in dbm per dispositivi CDMA

risposta

16

Beh, non sono sicuro se questo è quello che stai cercando, ma dopo aver dato un'occhiata al file SignalStrength.java nella fonte Android ho notato un po 'di codice che ha un sacco di livelli per i livelli di cdma dbm ed 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 

e il livello è il più basso dei due

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

ma ho notato che questo non correla alle barre mostra reale nella notifica. Se in 3G, questo livello viene ignorato e viene utilizzato il rapporto Segnale per rumore.

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

se i dati scendono da 3G a 1x, quindi utilizzare il livello attuale.

Questo è stato il mio codice per trovare mostrare il numero di barre.

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


     } 
    } 

in uso su questo metodo di creare al di sotto, e anche fare in modo manifesto utilizza READ_PHONE_STATE.

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

Cosa succede se il telefono è GSM. La variabile "signalStrengthValue" è il valore dBm. Come calcolare il valore ECIO? – MCGBra

Problemi correlati