2012-10-30 70 views
1

只是一個簡單的問題,因爲我找不到任何信息。 我只想每秒記錄一次CDMA信號強度Android:每秒獲得cdmaDbm

你有什麼建議嗎?

我發現了很多的例子,但他們都使用onSignalChange()方法,這並不真正爲我工作。

感謝

+0

我也想知道這個答案。 – JPM

+0

我真的沒有辦法,但我知道,但信號變化很大,你可以使用onSignalStrengthsChanged只是有時信號不會改變幾個... – JPM

回答

1

好吧,我不知道這是你正在尋找,但在Android的源SignalStrength.java文件服用後一看什麼,我注意到一些代碼有一堆的CDMA水平dbm和ecio級別。

DBM 
level 4 >= -75 
level 3 >= -85 
level 2 >= -95 
level 1 >= -100 

Ecio 
level 4 >= -90 
level 3 >= -110 
level 2 >= -130 
level 1 >= -150 

和水平是最低的兩個

actualLevel = (levelDbm < levelEcio) ? levelDbm : levelEcio; 

但我注意到,這並不關聯於該通知中顯示的實際吧。如果在3G中,則忽略該等級並使用信噪比。

signalStrength.getEvdoSnr() // value is 0 to 8 so divide by two to get the bars 

如果數據從3G下降到1x,則使用actualLevel。

這是我的代碼來查找顯示酒吧的數量。

public void onSignalStrengthsChanged(SignalStrength signalStrength) { 
     super.onSignalStrengthsChanged(signalStrength); 
     if (signalStrength.isGsm()) { 
      if (signalStrength.getGsmSignalStrength() != 99) 
       signalStrengthValue = signalStrength.getGsmSignalStrength() * 2 - 113; 
      else 
       signalStrengthValue = signalStrength.getGsmSignalStrength(); 
     } else { 
      final int snr = signalStrength.getEvdoSnr(); 
      final int cdmaDbm = signalStrength.getCdmaDbm(); 
      final int cdmaEcio = signalStrength.getCdmaEcio(); 
      int levelDbm; 
      int levelEcio; 
      int level = 0; 

      if (snr == -1) { 
       if (cdmaDbm >= -75) levelDbm = 4; 
       else if (cdmaDbm >= -85) levelDbm = 3; 
       else if (cdmaDbm >= -95) levelDbm = 2; 
       else if (cdmaDbm >= -100) levelDbm = 1; 
       else levelDbm = 0; 

       // Ec/Io are in dB*10 
       if (cdmaEcio >= -90) levelEcio = 4; 
       else if (cdmaEcio >= -110) levelEcio = 3; 
       else if (cdmaEcio >= -130) levelEcio = 2; 
       else if (cdmaEcio >= -150) levelEcio = 1; 
       else levelEcio = 0; 

       level = (levelDbm < levelEcio) ? levelDbm : levelEcio; 
      } else { 
       if (snr == 7 || snr == 8) level =4; 
       else if (snr == 5 || snr == 6) level =3; 
       else if (snr == 3 || snr == 4) level = 2; 
       else if (snr ==1 || snr ==2) level =1; 

      } 

      text.setText("Bars= " + level); 


     } 
    } 

在創建方法中使用下面的方法,並確保清單使用READ_PHONE_STATE。

TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
    AndroidPhoneStateListener phoneStateListener = new AndroidPhoneStateListener(text); 
    telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); 
+0

道具爲振興老問題 –

+0

謝謝...正在進行搜索,發現這個老問題認爲它需要一個答案。即使他想要的東西幾乎是不可能的,除非你根植並閱讀系統文件,但我給了他最好的選擇。 – JPM