我使用下面的代码来获取信号强度,
SignalStrengthListener signalStrengthListener;
signalStrengthListener = new SignalStrengthListener();
((TelephonyManager) getSystemService(TELEPHONY_SERVICE)).listen(
signalStrengthListener,
SignalStrengthListener.LISTEN_SIGNAL_STRENGTHS);
然后它正在监听信号强度,
private class SignalStrengthListener extends PhoneStateListener {
@Override
public void onSignalStrengthsChanged(
android.telephony.SignalStrength signalStrength) {
// get the signal strength (a value between 0 and 31)
int strengthAmplitude = signalStrength.getGsmSignalStrength();
// do something with it (in this case we update a text view)
// signalStrengthText.setText(String.valueOf(strengthAmplitude));
if (strengthAmplitude > 30) {
signalStrengthText.setText("Good");
// signalStrengthText.setTextColor(getResources().getColor(R.color.good));
} else if (strengthAmplitude > 20 && strengthAmplitude < 30) {
signalStrengthText.setText("Average");
// signalStrengthText.setTextColor(getResources().getColor(R.color.average));
} else if (strengthAmplitude < 20) {
signalStrengthText.setText("Weak");
// signalStrengthText.setTextColor(getResources().getColor(R.color.weak));
}
super.onSignalStrengthsChanged(signalStrength);
}
}
如果设备中存在 SIM 卡,则效果很好。但是当我从设备中取出 sim 卡然后检查信号强度时,它仍然提供了一些信号强度值。
我能想到的一个可能的解决方案是首先检查设备中是否存在 sim,然后显示信号强度。但我想知道对这种奇怪行为的解释以及可能的解决方案。
最佳答案
没有USIM小区服务需要 - 仅用于身份验证。否则紧急调用将失败。
一点也不奇怪...这是常识,因为您不会移除 radio 或禁用它。
一个简单的测试:移除 USIM 卡,调用紧急服务电话,假装您正在调用电话。
关于android - 如果没有 Sim 存在,设备显示信号强度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14577080/