Уровень сигнала LTE ASU всегда 97

Я фиксирую значения RSSI сигналов LTE, используя следующий код:

cInfoList = telephony_manager.getAllCellInfo()
for (CellInfo info : cInfoList){
    if (info instanceof CellInfoLte) {
        CellSignalStrengthLte signalstrength_lte = ((CellInfoLte) info).getCellSignalStrength();
        displayAsu.setText(signalstrength_lte.getAsuLevel() + "");
        displayDbm.setText(signalstrength_lte.getDbm() + "");
    }
}

(* примечание: я просто упростил свой код: цикл for не переопределяет текстовые поля.)

В одном телефоне (LG G4) я получаю значимые значения: Asu_level=32, dbm=-108

Но в другом телефоне (Samsung Galaxy S6) я получаю неверные значения: Asu_level=97, dbm=1022

В настройках телефона Samsung->О телефоне->Статус->Сила сигнала я вижу -107dBm 33 asu (что имеет смысл)

LG G4: Android 5.1, API 22 и Samsung Galaxy S6: Android 5.0.2, API 21

Почему один и тот же код показывает разное поведение (уровни Asu) на разных телефонах?


person Onur    schedule 14.01.2016    source источник


Ответы (1)


Похоже, что S6 помещает поврежденные значения уровня сигнала в свои объекты CellInfoLte (и неустановленные уровни в свои объекты CellInfoCdma). https://github.com/Tombarr/Signal-Strength-Detector — это приложение, которое использует отражение для вывода множества данных, связанных с уровнем сигнала. На моем S6 я вижу, что SignalStrength (который является параметром обратного вызова PhoneStateListener.onSignalStrengthsChanged) включает разумно выглядящие значения mCdmaDbm/mLteRsrp. Очевидно, что создание прослушивателя TelephonyManager менее удобно и, вероятно, требует больше накладных расходов, но похоже, что это то, что требуется на этом устройстве: -/

person Daniel Weaver    schedule 12.10.2016