Je vérifie l'intensité du signal pour les appareils CDMA. Quelqu'un peut-il préciser la plage signalStrength.getCdmaDbm()
les retours Le plus bas est -120 mais pour un signal de pleine puissance, quelle est la valeur ? La valeur la plus élevée que j'ai obtenue est -52.
Réponse
Trop de publicités?Je ne sais pas si c'est ce que vous cherchez, mais après avoir jeté un coup d'œil au fichier SignalStrength.java dans les sources d'Android, j'ai remarqué un bout de code qui a plusieurs niveaux pour les niveaux cdma dbm et 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
et le niveau est le plus bas des deux
actualLevel = (levelDbm < levelEcio) ? levelDbm : levelEcio;
mais j'ai remarqué qu'il n'y a pas de corrélation avec les barres réelles affichées dans la notification. Si vous êtes en 3G, ce niveau est ignoré et c'est le rapport signal/bruit qui est utilisé.
signalStrength.getEvdoSnr() // value is 0 to 8 so divide by two to get the bars
si les données passent de 3G à 1x, utiliser le niveau réel.
Voici mon code pour afficher le nombre de barres.
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);
}
}
dans la méthode de création, utiliser ce qui suit, et s'assurer que le manifeste utilise READ_PHONE_STATE.
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
AndroidPhoneStateListener phoneStateListener = new AndroidPhoneStateListener(text);
telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);