10
CDMA 장치의 신호 강도를 검사하고 있습니다. 누구든지 signalStrength.getCdmaDbm()
반환 범위를 지정할 수 있습니까?. 가장 낮은 값은 -120이지만 신호 강도는 무엇입니까? 내가 얻은 최고는 -52입니다.CDMA 장치의 dbm에서의 signalStrength 범위
CDMA 장치의 신호 강도를 검사하고 있습니다. 누구든지 signalStrength.getCdmaDbm()
반환 범위를 지정할 수 있습니까?. 가장 낮은 값은 -120이지만 신호 강도는 무엇입니까? 내가 얻은 최고는 -52입니다.CDMA 장치의 dbm에서의 signalStrength 범위
글쎄,이게 당신이 찾고있는 것이지만, 안드로이드 소스의 SignalStrength.java 파일을 살펴본 후에 나는 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;
최저이지만 I는이 알림에 나타내는 실제 바에 상관하지 않는 것으로 확인. 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 메소드는 아래에서 이것을 사용하고 manifest가 READ_PHONE_STATE를 사용하는지 확인하십시오.
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
AndroidPhoneStateListener phoneStateListener = new AndroidPhoneStateListener(text);
telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
휴대 전화가 GSM 인 경우 어떻게됩니까? 변수 "signalStrengthValue"는 dBm 값입니다. ECIO 값을 계산하는 방법? – MCGBra