2013-02-17 26 views
0

我想顯示當前的信號強度和當前的細胞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。有什麼我失蹤?

+0

你註冊你的聽衆嗎?你有權限嗎?如果是的話,請嘗試使'singalStrengths'靜態 - 或者更好地將其存儲在偏好中。即使如此,它不會顯示最新的信號 - 請參閱http://stackoverflow.com/questions/3888775/instant-signal-strength – 2013-07-08 13:21:45

+0

很久以前,我記得當我取消getRSSI()方法並將listener和.getStrength()直接在OnCreate()中,它工作正常。但說實話仍然不知道爲什麼它運作良好。 – 2013-07-08 13:52:18

+0

將它作爲答案發布 - 我不知道它爲什麼起作用 - 您確定這是您做出的唯一更改嗎? – 2013-07-08 13:58:51

回答

0

嗯,這是我以後的嘗試,它工作正常。我必須使CurStrgth.setText()獨立於Button和PhoneStateListener內部,並從OnCreate()方法調用偵聽器。它工作正常,每當它獲得信號強度的變化時更新CurStrgth TextView。我下面的代碼給出:

public class MainActivity extends Activity implements OnClickListener { 


TextView CurStrgth; 
MyPhoneStateListener MyListener; 
TelephonyManager Tel; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    CurStrgth = (TextView) findViewById(R.id.tvCurCellStrength); 

    MyListener = new MyPhoneStateListener(); 

    Tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
    Tel.listen(MyListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); 


} 


@Override 
protected void onPause() { 
    super.onPause(); 
    Tel.listen(MyListener, PhoneStateListener.LISTEN_NONE); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    Tel.listen(MyListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); 
} 

private class MyPhoneStateListener extends PhoneStateListener { 
    String gsmStrength = ""; 

    @Override 
    public void onSignalStrengthsChanged(SignalStrength signalStrength) { 
     super.onSignalStrengthsChanged(signalStrength); 
      gsmStrength = String 
       .valueOf(signalStrength.getGsmSignalStrength() * 2 - 113); 
     CurStrgth.setText(MyListener.getStrength() + "dBm"); 
    } 

    public String getStrength() { 
     return gsmStrength; 
    } 

} 
} 

現在,我檢查只是調用

CurStrgth.setText(MyListener.getStrength() + "dBm"); 

一個按鈕的OnClick()方法中,它顯示了一次性的價值,但如果我以後按下按鈕它從不更新力量並不斷顯示初始值。

+0

可能在您的初始實現中,它沒有時間更新變量 - 請參閱[here ](http://stackoverflow.com/a/5832912/281545)。 「它永遠不會更新實力並不斷顯示初始價值」 - >即使價值確實發生了變化? (請參閱http://stackoverflow.com/a/372​​0676/281545:偵聽器只能在大信號更改中調用)。編輯:請!不要使用以大寫字母開頭的變量名(格式更好 - 但避免不必要的空行)。編輯2:爲什麼你註冊onResume和onCreate? EDIT3:接受你的回答:) – 2013-07-08 17:39:01

+0

實際上,當它發生了很大的變化時它改變了汽車,但我不認爲你可以控制聽者的傾聽。但我計劃,當我已經啓動監聽器並註冊它時,如果我只需點擊一個按鈕,就可以從該監聽器更新的值中獲取最新值,但它會起作用,但似乎只是第一次單擊按鈕,然後它保持顯示相同的值,即使我改變了我的房間!並感謝編輯:D註冊實際上是這是像我的早期代碼之一.. – 2013-07-08 23:55:43

+0

歡迎 - 也許檢查http://stackoverflow.com/questions/3888775/instant-signal-strength/17533439#17533439 - 也許爲您提供更新的信號 - 如果您希望用戶收到您的評論通知,請添加@Mr_and_Mrs_D(示例) - 我只是偶然看到這一點 – 2013-07-09 00:04:33