2015-12-05 35 views
1

我正在製作一個獲取Wi-Fi和移動數據信息的應用程序。該應用程序的Wi-Fi部分工作正常,但我似乎無法使數據部分工作。我聽說過這樣的三星手機的問題(我測試的一個),我需要一個解決辦法,而不以上的15Android獲取移動數據信號強度(API <17)

我的API級別去這裏是我當前的代碼:

class myPhoneStateListener extends PhoneStateListener { 

    @Override 
    public void onSignalStrengthsChanged(SignalStrength signalStrength) { 

     super.onSignalStrengthsChanged(signalStrength); 
     if (signalStrength.isGsm()) { 

      mobileStrength = signalStrength.getGsmSignalStrength(); 
      mobileStrength = (2 * mobileStrength) - 113; 

     } else { 

      mobileStrength = signalStrength.getCdmaDbm(); 

     } 
    } 
} 

但它返回null

回答

3
/** 
* Gets the signal level from a <tt>SignalStrength</tt> as a value in the 
* range 0-4. This info is hidden from the public API, so this method 
* obtains it via reflection. 
* 
* @return the signal level, or 0 if Google has broken the hack 
*/ 
public static int getSignalLevel(final SignalStrength signal) { 
    try { 
     final Method m = SignalStrength.class.getDeclaredMethod("getLevel", (Class[]) null); 
     m.setAccessible(true); 
     return (Integer) m.invoke(signal, (Object[]) null); 
    } catch (Exception e) { 
     Log.debug(TAG, "Google hates developers", e); 
     return 0; 
    } 
} 
+0

它返回4(我認爲這是最好的)。有沒有辦法從0到100?如果不是,我應該只使用'[result] * 25'的[result] * 20'嗎? – AngryCupcake274

+0

@ AngryCupcake274如果您想了解該方法如何產生一個值,請在AOSP中查找並根據您的目的進行調整。就我個人而言,我認爲在默認實現中存在一定程度的「酒吧通脹」。 –

+0

你知道一種像WifiInfo.getLinkSpeed()那樣獲得移動數據速度的方法嗎?我不在乎它是什麼樣的網絡,我只需要一個數字。 (我不得不在這裏問,因爲我不能發佈90分鐘) – AngryCupcake274

1

您是否在您的AndroidManifest.xml文件中設置了權限?

如果沒有,請設置爲讀取手機狀態。

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

此致,

弗萊明

+0

仍返回'null'。 – AngryCupcake274