Устройство, показывающее силу сигнала, если нет сима
Я использовал следующий код, чтобы получить силу сигнала,
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);
}
}
Хорошо работает, если в устройстве присутствует сим. Но когда я удаляю сим из устройства, а затем проверяю уровень сигнала, он все равно дает некоторое значение для уровня сигнала.
Одно из возможных решений, о котором я могу подумать, - это сначала проверить, присутствует ли сим в устройстве или нет, а затем показать уровень сигнала. Но я хотел бы узнать объяснение этого странного поведения и возможное решение для него.
2 ответа
USIM не требуется для сотовой связи - только для аутентификации. иначе экстренные вызовы не будут выполнены.
это совсем не странно... это здравый смысл, поскольку вы не удаляете радио и не отключаете его.
простой тест: удалите USIM, позвоните в службу экстренной помощи, представьте, что вы набираете телефон.
Прежде чем проверять силу сигнала, вы можете проверить, имеет ли устройство SIM-карту или нет (если вы беспокоитесь о сети WIFI, вам нужно разобраться с этим отдельно), а затем проверить силу сигнала. Вы могли бы попробовать что-то вроде
public boolean isSimAvailable() {
boolean isAvailable = false;
TelephonyManager telMgr = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
int simState = telMgr.getSimState();
switch (simState) {
case TelephonyManager.SIM_STATE_ABSENT: //SimState = “No Sim Found!”;
break;
case TelephonyManager.SIM_STATE_NETWORK_LOCKED: //SimState = “Network Locked!”;
break;
case TelephonyManager.SIM_STATE_PIN_REQUIRED: //SimState = “PIN Required to access SIM!”;
break;
case TelephonyManager.SIM_STATE_PUK_REQUIRED: //SimState = “PUK Required to access SIM!”; // Personal Unblocking Code
break;
case TelephonyManager.SIM_STATE_READY:
isAvailable = true;
break;
case TelephonyManager.SIM_STATE_UNKNOWN: //SimState = “Unknown SIM State!”;
break;
}
return isAvailable;
}
/// Когда вы получите уровень сигнала, проверьте, как
SignalStrengthListener signalStrengthListener;
if(isSimAvailable()){
signalStrengthListener = new SignalStrengthListener();
((TelephonyManager) getSystemService(TELEPHONY_SERVICE)).listen(
signalStrengthListener,
SignalStrengthListener.LISTEN_SIGNAL_STRENGTHS);
} else {
//alert the user or do other stuff.
}