什么是SIM状态值时,"飞行模式和QUOT;被接通 [英] What is the value of SIM state when "airplane mode" is turned on
问题描述
我不知道什么是SIM状态由<一个返回值href=\"http://developer.android.com/reference/android/telephony/TelephonyManager.html#getSimState%28%29\"相对=nofollow> TelephonyManager.getSimState()
当飞行模式是否已经开启?这似乎没有直接规定在SDK规范的任何地方。
I wonder what is the value of SIM state returned by TelephonyManager.getSimState()
when "airplane mode" is turned on? This seems to be not directly specified anywhere in the SDK specification.
其实我需要得到运营商的SIM code(MCC + MNC,即)使用<一个href=\"http://developer.android.com/reference/android/telephony/TelephonyManager.html#getSimOperator%28%29\"相对=nofollow> getSimOperator()
方法,但JavaDoc中指出,使用该方法:
Actually I need to get SIM operator code (i.e. MCC+MNC) using getSimOperator()
method, but JavaDoc states that to use that method:
SIM状态必须<一个href=\"http://developer.android.com/reference/android/telephony/TelephonyManager.html#SIM_STATE_READY\"相对=nofollow> SIM_STATE_READY
更新
我测试了它在模拟器并返回<一个href=\"http://developer.android.com/reference/android/telephony/TelephonyManager.html#SIM_STATE_UNKNOWN\"相对=nofollow> SIM_STATE_UNKNOWN
(这是由javadoc的描述为状态之间的转换)后,飞行模式已打开。不过,我想知道它是否是在Android手机常见的行为?
I tested it under emulator and it returns SIM_STATE_UNKNOWN
(which is described by javadoc as a "transition between states") after airplane mode is switched on. However I would like to know whether it is a common behavior on Android phones?
推荐答案
搜索的Android 4.1源后我发现下面的code私营类之一<一个href=\"http://androidxref.com/4.1.1/xref/frameworks/base/telephony/java/com/android/internal/telephony/IccCard.java\"相对=nofollow> com.android.internal.telephony.IccCard
:
After searching Android 4.1 sources I found the following code in one of the private classes 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
将返回每当无线电状态是<一个href=\"http://androidxref.com/4.1.1/xref/frameworks/opt/telephony/src/java/com/android/internal/telephony/CommandsInterface.java#30\"相对=nofollow> RADIO_OFF 或<一个href=\"http://androidxref.com/4.1.1/xref/frameworks/opt/telephony/src/java/com/android/internal/telephony/CommandsInterface.java#31\"相对=nofollow> RADIO_UNAVAILABLE 。然后 State.UNKNOWN
将被转换为 SIM_STATE_UNKNOWN
按 TelephonyManager.getSimState()恒code>方法。
So State.UNKNOWN
would be returned whenever radio state is one of RADIO_OFF or RADIO_UNAVAILABLE. Then State.UNKNOWN
will be converted to SIM_STATE_UNKNOWN
constant by TelephonyManager.getSimState()
method.
由于结论:当飞行模式已开启 getSimState
将返回 SIM_STATE_UNKNOWN
As the conclusion: when airplane mode is turned on getSimState
will return SIM_STATE_UNKNOWN
.
这篇关于什么是SIM状态值时,&QUOT;飞行模式和QUOT;被接通的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!