Я могу опоздать с ответом на ваш вопрос, но если вы все еще ищете ответ, вот он:
a) да, вы должны использовать PhoneStateListener и переопределить onSignalStrengthsChanged as, насколько мне известноэто единственный способ получить текущий уровень сигнала ячеек для GSM.Слушатель вызывается только при больших изменениях уровня сигнала, поэтому вы сами не можете контролировать слушателя.слушатель будет автоматически обновлять или произносить тост, когда он вызывается.Поэтому лучше объявить прослушиватель и попросить его прослушивать в onCreate ().
b) Для получения доступа к значению RSSI извне Listener не сложно, просто сохраните значение в переменной исоздайте метод, подобный getRSSI (), который будет возвращать вам значение при его вызове.Пример приведен ниже:
public class GsmRSSI extends Activity{
MyPhoneStateListener MyListener;
TelephonyManager Tel;
ArrayList<String> signalStrength = new ArrayList<String>();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyListener = new MyPhoneStateListener();
Tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
Tel.listen(MyListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
timer.schedule(new TimerTask() {
public void run() {
String rssi = MyListener.getStrength();
if(!rssi.equals(""))
signalStrength.add(rssi);
}
}, 0, 5000);//it will add the rssi value after every 5000ms
}
private class MyPhoneStateListener extends PhoneStateListener {
String gsmStrength = "";
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
super.onSignalStrengthsChanged(signalStrength);
gsmStrength = String.valueOf(signalStrength.getGsmSignalStrength()* 2 - 113);
}
public String getStrength() {
return gsmStrength;
}
}
}
Это должно сделать работу за вас.Но в начале вы можете не получить какое-либо значение rssi в течение некоторого времени, так как слушатель вызывается только тогда, когда в rssi происходят значительные изменения.