2

does anyone know how to get the signal strength without having to call the onSignalStrengthChanged. The problem with onSignalStrengthchanged is that is it called when the signal strength changes and I need to get the value of signalstrength according to a different criteria.

Thanks in advance.

user2031865
  • 93
  • 1
  • 2
  • 10

4 Answers4

12

On API level 17 only, here's some code that can be used in an Activity (or any other Context child class):

import android.telephony.CellInfo;
import android.telephony.CellInfoCdma;
import android.telephony.CellInfoGsm;
import android.telephony.CellInfoLte;
import android.telephony.CellSignalStrengthCdma;
import android.telephony.CellSignalStrengthGsm;
import android.telephony.CellSignalStrengthLte;
import android.telephony.TelephonyManager;

try {
    final TelephonyManager tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
    for (final CellInfo info : tm.getAllCellInfo()) {
        if (info instanceof CellInfoGsm) {
            final CellSignalStrengthGsm gsm = ((CellInfoGsm) info).getCellSignalStrength();
            // do what you need
        } else if (info instanceof CellInfoCdma) {
            final CellSignalStrengthCdma cdma = ((CellInfoCdma) info).getCellSignalStrength();
            // do what you need
        } else if (info instanceof CellInfoLte) {
            final CellSignalStrengthLte lte = ((CellInfoLte) info).getCellSignalStrength();
            // do what you need
        } else {
            throw new Exception("Unknown type of cell signal!");
        }
    }
} catch (Exception e) {
    Log.e(TAG, "Unable to obtain cell signal information", e);
}

Previous versions of Android require you to call the listener, there is no other alternative (see this link).

Also ensure that your application contains the appropriate permissions.

Community
  • 1
  • 1
Andre
  • 3,150
  • 23
  • 23
0

you can access SignalStrength via reflection call. Please go through the link for implementation http://blog.ajhodges.com/2013/03/reading-lte-signal-strength-rssi-in.html

A.Ruppin
  • 161
  • 6
  • I only get 99 for signal strength and -1 for Bit error rate. It doesnt seem to give me the real value. do you know what could be wrong? – user2031865 Aug 16 '13 at 06:52
  • As per the GSM Signal Strength, valid values are (0-31, 99) as defined in TS 27.007 8.5 `0 -113 dBm or less 1 -111 dBm 2...30 -109... -53 dBm 31 -51 dBm or greater 99 not known or not detectable` see more over [3GPP TS 27.007](http://m10.home.xs4all.nl/mac/downloads/3GPP-27007-630.pdf) – jitain sharma Aug 01 '14 at 10:15
0

There is another API in Android called CellInfo. But I am not sure whether signal strength returned by OnSignalStrengthsChanged() and CellInfo is same or not.

https://developer.android.com/reference/android/telephony/CellSignalStrength.html

kranthi
  • 3
  • 3
0

Based on Andre's answer above, in Kotlin you can use this one-liner (again API 17+):

fun getRadioSignalLevel(): Int {
  return when (val info = telephonyManager.allCellInfo?.firstOrNull()) {
    is CellInfoLte   -> info.cellSignalStrength.level
    is CellInfoGsm   -> info.cellSignalStrength.level
    is CellInfoCdma  -> info.cellSignalStrength.level
    is CellInfoWcdma -> info.cellSignalStrength.level
    else             -> 0
  }
}
murki
  • 879
  • 12
  • 21