J'essaie de montrer la force actuelle du signal et l'ID de la cellule actuelle et Lac dans mon application pour le réseau 3g. Comme il doit être compatible avec API-8, j'utilise la classe SignalStrength de android.telephony. Quand je clique sur un bouton, pour l'instant je veux qu'il montre le CID, Lac et la force du signal de la cellule actuelle. Je reçois le CID et le lac, mais la force du signal montre toujours 0. Le code est donné ci-dessous:Mon PhoneStateListener n'est pas appelé pour montrer la force du signal
public void onClick(View v) {
switch (v.getId()) {
case R.id.bShowCell:
GsmCellLocation location;
String cellID = "";
String lac = "";
Context context = (Context) getApplicationContext();
TelephonyManager tm = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
location = (GsmCellLocation) tm.getCellLocation();
cellID = String.valueOf(location.getCid());
lac = String.valueOf(location.getLac());
CurCell.setText(cellID);
CellLac.setText(lac);
CurStrgth.setText(getRSSI());
}
}
public String getRSSI() {
MyListener = new MyPhoneStateListener();
Tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
Tel.listen(MyListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
String strength = MyListener.getStrength();
return strength;
}
class MyPhoneStateListener extends PhoneStateListener {
public int singalStrengths;
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
super.onSignalStrengthsChanged(signalStrength);
int asu = signalStrength.getGsmSignalStrength();
singalStrengths = -113 + 2 * asu;
}
public String getStrength() {
return String.valueOf(singalStrengths);
}
}
J'ai vérifié beaucoup d'exemples en ligne et je pense que mon code est correct. Mais quand je l'ai vérifié en mode debug, je vois que quand je clique sur le bouton, le programme ne va jamais dans onSignalStrengthsChanged. Y a-t-il quelque chose qui me manque?
est-ce que vous enregistrez votre auditeur? avez-vous les permissions? Si oui, essayez de rendre statique 'singalStrengths' - ou mieux encore, stockez-le dans les préférences. Même ainsi, il ne sera pas afficher le dernier signal - voir http://stackoverflow.com/questions/3888775/instant-signal-strength –
Eh bien, il y a longtemps, je me souviens comme quand j'ai annulé la méthode getRSSI() et mettre le écouteur et .getStrength() directement dans OnCreate(), cela a bien fonctionné. Mais pour être honnête, je ne sais toujours pas pourquoi cela a bien fonctionné. –
Postez-le comme une réponse - je ne sais pas pourquoi cela a fonctionné - êtes-vous sûr que c'était le seul changement que vous avez fait? –