我想顯示當前的信號強度和當前的細胞ID和Lac在我的應用程序3g網絡。由於它必須兼容API-8,因此我使用android.telephony的SignalStrength類。當我點擊一個按鈕時,現在我想讓它顯示當前單元的CID,Lac和信號強度。我得到的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 – 2013-07-08 13:21:45
很久以前,我記得當我取消getRSSI()方法並將listener和.getStrength()直接在OnCreate()中,它工作正常。但說實話仍然不知道爲什麼它運作良好。 – 2013-07-08 13:52:18
將它作爲答案發布 - 我不知道它爲什麼起作用 - 您確定這是您做出的唯一更改嗎? – 2013-07-08 13:58:51