如何检测"no carrier" SIM卡模式?



如何检测GSM信号强度低,蜂窝网络丢失?双卡设备呢?

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开发者手册。

上面涵盖了GSM信号,所以如果你只对GSM信号感兴趣,坚持我前面的例子。如果您可能有兴趣说明由于缺乏信号强度,数据网络是否可用,您还可以获取所有可用数据网络的其他信号值:

  • SignalStrength.getCdmaDbm()返回CDMA网络的RSSI值,单位为dBm。
  • SignalStrength.getEvdoDbm()返回Evdo网络的RSSI值,单位为dBm。

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

双卡设备呢?

我不知道,从来没做过。然而,我不明白为什么上述可能不适用于多sim卡设备。应该是这样的

最新更新