如何检测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卡设备。应该是这样的