Определить силу сигнала в дБм в приложении Android (Java)

Что нужно: по нажатию на кнопку определить силу сигнала сети мобильной связи в данный момент в дБм (на крайний случай - просто отличный/хороший/плохой).

В интернете вроде много примеров, но все какие-то громоздкие и непонятные, прикрутить их к моей программе не получается. Плюс непонятно, почему для этого вроде как подходят сразу несколько классов, а именно:

android.telephony.SignalStrength
android.telephony.CellSignalStrengthCdma (Gsm/Lte)
android.telephony.TelephonyManager

Во всех этих классах есть метод типа getDbm().

Зачем так много вариантов и какой правильней использовать, а главное, почему код примеров для такой ерунды такой объёмный мне неясно.

И ещё такой момент, метод getDbm() в указанных классах отдельный для каждого типа сети (2G, 3G, LTE), может есть что-то универсальное, чтобы просто определить силу, не считаясь с тем какой тип сети доступен?

Минимальное API моего приложения - 17.

Подскажите в какую сторону вообще смотреть (какой класс правильнее выбрать и с ним разбираться) или подкиньте годных примеров, пожалуйста


Ответы (1 шт):

Автор решения: Maks

Думаю что это поможет:

public class PhoneCustomStateListener extends PhoneStateListener {

public int signalSupport = 0;

@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
    super.onSignalStrengthsChanged(signalStrength);

    signalSupport = signalStrength.getGsmSignalStrength();
    Log.d(getClass().getCanonicalName(), "------ gsm signal --> " + signalSupport);

    if (signalSupport > 30) {
        Log.d(getClass().getCanonicalName(), "Signal GSM : Good");


    } else if (signalSupport > 20 && signalSupport < 30) {
        Log.d(getClass().getCanonicalName(), "Signal GSM : Avarage");


    } else if (signalSupport < 20 && signalSupport > 3) {
        Log.d(getClass().getCanonicalName(), "Signal GSM : Week");


    } else if (signalSupport < 3) {
        Log.d(getClass().getCanonicalName(), "Signal GSM : Very week");


    }
}
}
→ Ссылка