搜索的Android 4.1源後,我發現下面的代碼的私有類com.android.internal.telephony.IccCard
之一:
public State getState() {
if (mState == null) {
switch(mPhone.mCM.getRadioState()) {
/* This switch block must not return anything in
* State.isLocked() or State.ABSENT.
* If it does, handleSimStatus() may break
*/
case RADIO_OFF:
case RADIO_UNAVAILABLE:
case SIM_NOT_READY:
case RUIM_NOT_READY:
return State.UNKNOWN;
case SIM_LOCKED_OR_ABSENT:
case RUIM_LOCKED_OR_ABSENT:
//this should be transient-only
return State.UNKNOWN;
case SIM_READY:
case RUIM_READY:
case NV_READY:
return State.READY;
case NV_NOT_READY:
return State.ABSENT;
}
} else {
return mState;
}
Log.e(mLogTag, "IccCard.getState(): case should never be reached");
return State.UNKNOWN;
}
所以State.UNKNOWN
會無論何時無線電狀態爲RADIO_OFF或RADIO_UNAVAILABLE之一時都會返回。然後State.UNKNOWN
將通過TelephonyManager.getSimState()
方法轉換爲SIM_STATE_UNKNOWN
常數。
由於結論:當飛機模式打開時getSimState
將返回SIM_STATE_UNKNOWN
。
你能修復鏈接到RADIO_OFF和RADIO_UNAVAILABLE嗎? –
@NiravZaveri完成。請注意,從Android 4.2'IccCard'開始,已轉換爲接口並已被棄用。相關邏輯現在位於[IccCardProxy]類(http://androidxref.com/4.2_r1/xref/frameworks/opt/telephony/src/java/com/android/internal/telephony/IccCardProxy.java#264)class。在收音機關閉時使用內部'State.NOT_READY'。然而,它在公共API中不可用,並且它在'getSimState()'方法中被轉換爲'SIM_STATE_UNKNOWN'。 – Idolon
謝謝。 即使在飛行模式打開的情況下,即使在飛行模式下也會進入Sim_State_Ready模式,但通常情況下我會發生什麼情況,但是也會將simSerialNumber返回爲NULL,然後返回。這就是爲什麼我想看看源代碼。 –