1

我正在使用以下代码捕获 LTE 信号的 RSSI 值:

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-loop 不会覆盖文本字段。)

在一部手机(LG G4)中,我得到了有意义的值:Asu_level=32,dbm=-108

但在另一部手机(三星 Galaxy S6)中,我得到无效值:Asu_level=97, dbm=1022

在三星手机的 Settings->AboutPhone->Status->SignalStrength 我看到-107dBm 33 asu(这是有道理的)

LG G4:Android 5.1、API 22三星 Galaxy S6:Android 5.0.2、API 21

为什么相同的代码在不同的手机上显示不同的行为(Asu 级别)?

4

1 回答 1

2

S6 似乎将损坏的信号电平值放入其 CellInfoLte 对象(并在其 CellInfoCdma 对象中未设置电平)。https://github.com/Tombarr/Signal-Strength-Detector是一个应用程序,它使用反射来转储过多的信号电平相关数据。在我的 S6 上,我可以看到 SignalStrength(它是 PhoneStateListener.onSignalStrengthsChanged 回调的参数)包含看起来很正常的 mCdmaDbm/mLteRsrp 值。创建 TelephonyManager 侦听器显然不太方便,并且可能会增加更多开销,但看起来这就是该设备所需要的:-/

于 2016-10-12T21:31:04.700 回答