“SIM卡状态”中的dBm和状态栏的信号格数是对应的吗?
来源:互联网 发布:粒子群算法的具体应用 编辑:程序博客网 时间:2024/04/28 04:26
Android手机设置中最后一项一般都是“关于手机”,在这个项目中可以找到查看sim卡状态的子页面。
其中可以查看信号强度,测试人员可以依据dBm和状态栏的信号格数大致确认两者之间的关系。
这个大部分情况下是ok的,不过对于Cdma网络来说这个就有可能出问题了。截图中的状态栏信号格数是双行的,这个是Cdma的特点,1X信号和EVDO信号同时注册的,1x用来语音通话,EVDO就和其名称一样(Evolution Data Only)是用于数据业务的。但是状态栏可以不显示双行啊,苹果的电信版本手机就只会显示一行。在Cdma网络中,这个设置中显示的Dbm和状态栏就不一定是对应的关系了。
截图中Activity的代码在设置中,packages/apps/Settings/src/com/android/settings/RadioInfo.java
private final void updateSignalStrength() { ... int signalDbm = mPhoneStateReceiver.getSignalStrengthDbm(); ... }
其中的mPhoneStateReceiver就是frameworks/opt/telephony/src/java/com/android/internal/telephony/PhoneStateIntentReceiver.java
public int getSignalStrengthDbm() { if ((mWants & NOTIF_SIGNAL) == 0) { throw new RuntimeException ("client must call notifySignalStrength(int)"); } return mSignalStrength.getDbm(); }frameworks/base/telephony/java/android/telephony/SignalStrength.java
public int getDbm() { int dBm; if(isGsm()) { dBm = getLteDbm(); if (dBm == INVALID) { dBm = getGsmDbm(); } } else { int cdmaDbm = getCdmaDbm(); int evdoDbm = getEvdoDbm(); return (evdoDbm == -120) ? cdmaDbm : ((cdmaDbm == -120) ? evdoDbm : (cdmaDbm < evdoDbm ? cdmaDbm : evdoDbm)); } if (DBG) { log("getDbm=" + dBm); } return dBm; }从代码中看出cdma网络下是选择1x信号和evdo信号中的最小值作为输出。
状态栏中的格数代码同样在SignalStrength.java中
public int getLevel() { int level; if (isGsm) { level = getLteLevel(); if (level == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) { level = getGsmLevel(); } } else { int cdmaLevel = getCdmaLevel(); int evdoLevel = getEvdoLevel(); if (evdoLevel == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) { /* We don't know evdo, use cdma */ level = cdmaLevel; } else if (cdmaLevel == SIGNAL_STRENGTH_NONE_OR_UNKNOWN) { /* We don't know cdma, use evdo */ level = evdoLevel; } else { /* We know both, use the lowest level */ level = cdmaLevel < evdoLevel ? cdmaLevel : evdoLevel; } //log("lq_signal getLevel() cdmaLevel = " + cdmaLevel + "; evdoLevel = " + evdoLevel + "; level = " + level); } if (DBG) { log("getLevel=" + level); } return level; }
信号格数同样是选取evdo和1x信号格数的最小值做为输出。1x信号在大于-90dBm就是满格了(cdma的特点,依据编码的正交来区别用户,对载波要求很低,相邻基站可以是同频率的载波),而evdo在大于-65dbm才能满格。
这样设置中显示的dBm就可能是1x,也可能是evdo;状态栏信号格数也是同样的状况。两者不一致的情况发生可能性很大。
对于cdma来说还是依据仪器或者日志查看靠谱。
- “SIM卡状态”中的dBm和状态栏的信号格数是对应的吗?
- android,sim卡,TelephonyManager,手机SIM卡状态的获取
- 读取SIM卡的状态、sim卡网络
- Android读取sim卡的状态
- 读取SIM卡的状态理论说明
- android-状态栏SIM卡信号显示(一)
- dBm和dB的关系
- db和dbm的理解
- DBM 和 DBN 的区别
- Android4.1 如何实现状态栏上信号图标有SIM卡1,2标记,并且当处于2G状态显示“G”,处于3G状态显示“3G”
- windows程序事件的信号状态和非信号状态
- DBM 与DBM的区别
- 广播中的信号引起的竞争状态
- 关于信号功率、增益的表示 dbi dbm
- 实现桌面应用图标的动态隐藏和显示,触发事件为SIM卡的状态
- android中判断sim卡状态和读取联系人资料的方法
- android中判断sim卡状态和读取联系人资料的方法
- android中判断sim卡状态和读取联系人资料的方法
- 将博客搬至CSDN
- AMD INSTINCT
- 用Github的Api发现stars最多开源项目
- try{}catch(Exception e){}异常处理
- Stanford CoreNLP学习日记2
- “SIM卡状态”中的dBm和状态栏的信号格数是对应的吗?
- Java线程:锁
- lnmp环境的使用
- Java线程:堵塞队列与堵塞栈
- Hdu 6069
- pick定理
- JNI 总结
- Java线程:条件变量、原子量、线程池等
- 事务的四种隔离级别和七种传播机制