Устройство, показывающее мощность сигнала, если сим отсутствует

Я использовал следующий код, чтобы получить уровень сигнала,

    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);
    }
}

Работает хорошо, если сим присутствует в устройстве. Но когда я удаляю сим-карту из устройства, а затем проверяю уровень сигнала, он все равно дает некоторое значение уровня сигнала.

Я могу придумать одно из возможных решений: сначала проверить, присутствует ли сим-карта в устройстве, а затем показать уровень сигнала. Но я хотел бы знать объяснение этого странного поведения и возможное решение для него.


person Sahil Mahajan Mj    schedule 29.01.2013    source источник
comment
У меня была такая же проблема, но после перезагрузки телефона я не получил сигнал. Так что, вероятно, уровень сигнала не сбрасывается автоматически до выключения.   -  person TheDevMan    schedule 17.10.2013


Ответы (2)


для сотовой связи не требуется USIM — только для аутентификации. в противном случае вызов службы экстренной помощи не удастся.

это совсем не странно... это здравый смысл, так как вы не удаляете радио и не отключаете его.

простой тест: удалите USIM, позвоните в службу экстренной помощи, представьте, что вы набираете номер с кармана.

person Martin Zeitler    schedule 16.11.2018

Прежде чем проверять уровень сигнала, вы можете проверить, есть ли на устройстве 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.
    }
person BharathRao    schedule 16.11.2018