Диапазон для уровня сигнала в dbm для устройств CDMA

Я проверяю силу сигнала для устройств CDMA. Может ли кто-нибудь указать диапазон signalStrength.getCdmaDbm() возвращает ?. Самый низкий – -120, но для полной силы сигнала, какова ценность? Самый высокий у меня есть -52.

Solutions Collecting From Web of "Диапазон для уровня сигнала в dbm для устройств CDMA"

Я не уверен, что это то, что вы ищете, но после просмотра файла SignalStrength.java в источнике Android я заметил немного кода, который имеет кучу уровней для уровней cdma dbm и 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 

И уровень – самый низкий из двух

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

Но я заметил, что это не коррелирует с фактическими барами, отображаемыми в уведомлении. Если в 3G, то этот уровень игнорируется и используется отношение сигнал / шум.

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

Если данные упадут с 3G на 1x, то используйте actualLevel.

Это был мой код, чтобы найти количество баров.

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

В методе on create используйте это ниже, а также убедитесь, что манифест использует READ_PHONE_STATE.

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