Я пытаюсь показать текущую силу сигнала и текущий идентификатор ячейки и Lac в своем приложении для сети 3g. Поскольку он должен быть совместим с API-8, я использую класс SignalStrength из android.telephony. Когда я нажимаю кнопку, на данный момент я хочу, чтобы она показывала CID, Lac и уровень сигнала текущей ячейки. Я получаю ИДС и ЛАК, но сила сигнала всегда показывает 0. Код приведен ниже:Мой PhoneStateListener не вызывается для отображения уровня сигнала
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);
}
}
Я проверил много примеров в Интернете, и я думаю, что мой код хорошо. Но когда я проверил его в режиме отладки, я вижу, что когда я нажимаю кнопку, программа никогда не переходит в onSignalStrengthsChanged. Есть что-то, чего я не вижу?
Вы регистрируете своего слушателя? у вас есть разрешения? если да, попробуйте сделать «singalStrengths» статическим - или даже лучше сохраните его в настройках. Даже в этом случае он не будет показывать последний сигнал - см. Http://stackoverflow.com/questions/3888775/instant-signal-strength –
well Это было давно, я помню, когда я отменил метод getRSSI() и поставил слушателя и .getStrength() внутри OnCreate(), он работал нормально. Но, честно говоря, еще не знаю, почему это сработало нормально. –
Опубликовать в качестве ответа - я не знаю, почему это сработало - вы уверены, что это было единственное изменение, которое вы сделали? –