Android 8.1 (O)信号强度介绍和定制(二)

3 信号格的获取

MobileSignalController

    @Override
    public int getCurrentIconId() {
        if (mCurrentState.iconGroup == TelephonyIcons.CARRIER_NETWORK_CHANGE) {
            return SignalDrawable.getCarrierChangeState(getNumLevels());
        } else if (mCurrentState.connected) {
            int level = mCurrentState.level; //信号强度等级,即信号格
            if (mConfig.inflateSignalStrengths) { //系统默认false,不走该分支
                level++;
            }
            return SignalDrawable.getState(level, getNumLevels(),
                    mCurrentState.inetCondition == 0);
        } else if (mCurrentState.enabled) {
            return SignalDrawable.getEmptyState(getNumLevels());
        } else {
            return 0;
        }
    }
对于mCurrentState.level 信号格的等级获取是在函数updateTelephony方法中有
        if (mCurrentState.connected) {
            if (!mSignalStrength.isGsm() && mConfig.alwaysShowCdmaRssi) {
                mCurrentState.level = mSignalStrength.getCdmaLevel();
            } else {
                mCurrentState.level = mSignalStrength.getLevel();
            }
            /// M: Customize the signal strength level. @ {
            mCurrentState.level = mStatusBarExt.getCustomizeSignalStrengthLevel(
                    mCurrentState.level, mSignalStrength, mServiceState);
            /// @ }
        }

 因此,从该处就明白了,信号等级的强度和显示刷新就会回到Android 8.1 (O)信号强度介绍和定制一开始讨论的地方。

参考链接:SystemUI 之状态上的手机信号显示

对于dB和dBm的介绍:

1 dB:一个表征相对值的值,纯粹的比值,只表示两个量的相对大小关系,无单位;当考虑甲的功率相比于乙的功率大或小多少个dB时,按照下面的计算公式:10log(甲的功率/乙的功率),如果采用两者的电压比计算,要用20log(甲的电压/乙的电压)

例 甲的功率比乙的功率大一倍,那么10lg(甲的功率/乙的功率)=10lg2 = 3dB.也就是说,甲的功率比乙的功率大3 dB。

2 dBm 是一个表示功率绝对值的值(也可以认为是以1mW功率为基准的一个比值),计算公式为:10log(功率值/1mw)。

[例]如果功率P为1mw,折算为dBm后为0dBm。

[例]对于40W的功率,按dBm单位进行折算后的值应为:

10log(40W/1mw)=10log(40000)=10log4+10log10000=46dBm。

总之,dB是两个量之间的比值,表示两个量间的相对大小,而dBm则是表示功率绝对大小的值。在dB,dBm计算中,要注意基本概念,

用一个dBm减另外一个dBm时,得到的结果是dB,如:30dBm - 0dBm = 30dB。

在安卓手机设置里,我们可以看到关于信号强度的状态信息,里面可以看到关于信号强度的一项,单位为dBm和asu。其中dBm(1毫瓦的分贝数)是衡量手机信号强度的通用指标,asu(alone signal unit 独立信号单元)是Google给Android手机定义的特有信号单位, 它们之间的关系是:dBm =-113+2*asu

你可能感兴趣的:(android,SystemUI)