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

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

    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.
    }
Другие вопросы по тегам