我需要获得有关我连接的蜂窝网络(GSM或LTE)的一些信息。其中一个信息是信号dBm和ASU级别。
我使用两种方法来获取此信息。一个是设置PhoneStateListener
,另一个是通过TelephonyManager
获取已注册的手机信息。
以下是代码示例:
mPhoneStateListener = new PhoneStateListener() {
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
super.onSignalStrengthsChanged(signalStrength);
telephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
System.out.println(signalStrength.toString());
System.out.println("#################");
CellInfoWcdma registeredCellInfo = (CellInfoWcdma) getRegisteredCellInfo();
System.out.println(registeredCellInfo.getCellSignalStrength().toString());
System.out.println(registeredCellInfo.getCellSignalStrength().getDbm());
System.out.println(registeredCellInfo.getCellSignalStrength().getAsuLevel());
System.out.println(registeredCellInfo.getCellSignalStrength().getLevel());
}
};
telephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
控制台中打印的输出是:
I/System.out
mGsmSignalStrength 20
mGsmBitErrorRate 0
mCdmaDbm -120
mCdmaEcio -160
mEvdoDbm -120
mEvdoEcio -1
mEvdoSnr -1
mLteSignalStrength 99
mLteRsrp 2147483647
mLteRsrq 2147483647
mLteRssnr 2147483647
mLteCqi 2147483647
gsm|lte
I/System.out: #################
I/System.out: CellSignalStrengthWcdma: ss=6 ber=99
I/System.out: -101
I/System.out: 6
I/System.out: 2
进行此措施后,在设置中 - >关于手机 - >国家 - > SIM状态,显示的值 -73 dBm 20 ASU
我相信signalStrength.getGsmSignalStrength()
为我提供了ASU级别,因此dBM计算为-113 + (2 * asu)
因此它为我提供了设置中显示的-73 dBm
。
使用TelephonyManager
我得到了不同的dBm和ASU值。
那些不一样吗?