2015-12-05 28 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