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 修改wifi信号强度
- android获取bluetooth的信号强度(RSSI)
- Android Telephony —— 手机信号实时变化源码分析过程记录
- 开发者大会传递信号:Android开发者将越来越赚钱?
- Android wifi信号强弱检测
- Android智能手机搜索不到路由器无线信号怎么办?
- 代码实现android手机信号监听
- android 获取wifi 信号质量