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來說還是依據儀器或者日誌查看靠譜。