我可能会迟到回答你的问题,但如果你还在寻找答案,这里是:
a) 是的,您必须使用 PhoneStateListener 并覆盖 onSignalStrengthsChanged,因为据我所知,这是获取当前单元格的 GSM 信号强度的唯一方法。监听器只在信号强度大的变化时被调用,所以你自己无法控制监听器。侦听器在被调用时会自动更新或敬酒。所以,最好在 onCreate() 声明监听器并让它监听。
b) 从 Listener 外部访问 RSSI 值并不难,只需将值存储在变量中并创建一个类似 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 发生重大变化时才会调用侦听器。