Определить силу сигнала в дБм в приложении Android (Java)
Что нужно: по нажатию на кнопку определить силу сигнала сети мобильной связи в данный момент в дБм (на крайний случай - просто отличный/хороший/плохой).
В интернете вроде много примеров, но все какие-то громоздкие и непонятные, прикрутить их к моей программе не получается. Плюс непонятно, почему для этого вроде как подходят сразу несколько классов, а именно:
android.telephony.SignalStrength
android.telephony.CellSignalStrengthCdma (Gsm/Lte)
android.telephony.TelephonyManager
Во всех этих классах есть метод типа getDbm().
Зачем так много вариантов и какой правильней использовать, а главное, почему код примеров для такой ерунды такой объёмный мне неясно.
И ещё такой момент, метод getDbm() в указанных классах отдельный для каждого типа сети (2G, 3G, LTE), может есть что-то универсальное, чтобы просто определить силу, не считаясь с тем какой тип сети доступен?
Минимальное API моего приложения - 17.
Подскажите в какую сторону вообще смотреть (какой класс правильнее выбрать и с ним разбираться) или подкиньте годных примеров, пожалуйста
Ответы (1 шт):
Думаю что это поможет:
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");
}
}
}