2013-04-07 53 views

回答

3

Android:如何检测“无载体”SIM卡模式?

PhoneStateListener类旨在为此目的而设计。当使用它时,当绑定到当前提供商的GSM信号发生变化时,您可以获得回叫。

确保在清单文件中设置了以下android.intent.action.PHONE_STATE

接下来,你需要调用TelephonyManager和绑定你PhoneStateListener它:

TelephonyManager telManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 
telManager.listen(this.phoneListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); 

你可以实现你PhoneStateListener这样:

private final PhoneStateListener phoneListener = new PhoneStateListener() { 

    @Override 
    public void onSignalStrengthsChanged(SignalStrength signalStrength) { 
     Log.d("onSignalStrengthsChanged", "The new singal strength is " 
       + signalStrength.getGsmSignalStrength()); 
    } 

}; 

GSM信号强度值定义TS 27.007 8.5。基本上0的值是低的,值31是好的,而值99表示不知道或不可检测。有效值为(0-31,99),如Android Developers manual中所述。

以上内容涵盖了GSM信号,所以如果您只对GSM信号感兴趣,请坚持我以前的例子。如果你可能有兴趣在陈述一个数据网络是否可用不是由于缺乏信号强度,还可以得到其它信号值,所有可用的数据网络:

通过调用TelephonyManager.getNetworkType()方法可以知道当前数据网络的类型。

双SIM卡设备怎么样?

我不知道,从来没有在他们的工作。但是我不明白为什么上述可能不适用于多SIM设备。它应该像这样工作。

+0

非常感谢! 似乎,实际上需要检查ServiceStateChanged等待“OUT_OF_SERVICE”的“1”。 或者是最低信号更正确的状态?从未使用过... – peacemakerv 2013-04-07 15:01:01

+0

您当然可以在onServiceStateChanged中观看“STATE_OUT_OF_SERVICE”事件。 onSignalStrengthsChanged可能会让您有机会更详细地了解信号的状态。这可以帮助您定义信号强度在您的应用程序中变得可接受或不可接受的级别。 – 2013-04-07 21:14:22

+0

谢谢,一切都很清楚! – peacemakerv 2013-04-19 13:57:50