我可能迟到回答你的问题,但如果你仍然在寻找答案,这里是:
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发生重大变化时才会调用侦听器。