Android - Signal Strength at Level, DBM and ASU

I am currently writing an application for a client who wants to collect signal strength data at set intervals.

I am currently using this code:

private static class MyPhoneStateListener extends PhoneStateListener
{
  @Override
  public void onSignalStrengthsChanged(SignalStrength signalStrength)
  {
     super.onSignalStrengthsChanged(signalStrength);
     telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE);
     InfoStore.setSignal(String.valueOf(signalStrength.getGsmSignalStrength()));
  }
};

This works fine, but the client wants the signal level at both levels (I think, how many bars?), DBM and ASU.

Does anyone know how to read signal strengths using these different forms?

+5
source share
3 answers

As mentioned by Charles Ma and Kevin Crumvidey, the corresponding Android methods are hidden (probably for a good reason), but you can still get the values ​​by reflection. So one solution to the original question:

private class MyPhoneStateListener extends PhoneStateListener
{
    public static final int INVALID = Integer.MAX_VALUE;

    public int signalStrengthDbm = INVALID;
    public int signalStrengthAsuLevel = INVALID;

    @Override
    public void onSignalStrengthsChanged(SignalStrength signalStrength)
    {
        signalStrengthDbm = getSignalStrengthByName(signalStrength, "getDbm");
        signalStrengthAsuLevel = getSignalStrengthByName(signalStrength, "getAsuLevel");
    }

    private int getSignalStrengthByName(SignalStrength signalStrength, String methodName)
    {
        try
        {
            Class classFromName = Class.forName(SignalStrength.class.getName());
            java.lang.reflect.Method method = classFromName.getDeclaredMethod(methodName);
            Object object = method.invoke(signalStrength);
            return (int)object;
        }
        catch (Exception ex)
        {
            return INVALID;
        }
    }
}
+7
source

android 4.x SignalStrength getAsuLevel, getDbm, getLevel ().

, Android, , . http://grepcode.com/file_/repository.grepcode.com/java/ext/com.google.android/android/4.1.2_r1/android/telephony/SignalStrength.java/

, , Lte Android, , , java-, , getLte * .

+2

Calculate dBm to

int SignalStrength_ASU = signalStrength.getGsmSignalStrength();
int SignalStrength_dBm = (2 * SignalStrength_ASU) - 113; // -> dBm
0
source

All Articles