Rango de la señalStrength en dbm para dispositivos CDMA

Estoy comprobando la intensidad de la señal para dispositivos CDMA. ¿Puede alguien especificar el rango signalStrength.getCdmaDbm() devuelve ?. Menor es -120 pero para la intensidad de señal completa ¿cuál es el valor? Lo más alto que tengo es -52.

Bueno, no estoy seguro de si esto es lo que está buscando, pero después de echar un vistazo a la SignalStrength.java archivo en la fuente android me di cuenta de un poco de código que tiene un montón de niveles de cdma dbm y ecio niveles.

 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 el más bajo de los dos

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

Pero me di cuenta de que esto no se correlaciona con las barras reales que aparecen en la notificación. Si en 3G, entonces este nivel se ignora y se utiliza la relación señal a ruido.

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

Si los datos caen de 3G a 1x entonces utilice el realLevel.

Este era mi código para encontrar 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 método on create, utilice esto a continuación y asegúrese de que el manifiesto use READ_PHONE_STATE.

  TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); AndroidPhoneStateListener phoneStateListener = new AndroidPhoneStateListener(text); telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.