7

信号強度を取得するために次のコードを使用しました。

    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を取り外してから信号強度を確認すると、信号強度にある程度の値が表示されます。

考えられる解決策の1つは、最初にSIMがデバイスに存在するかどうかを確認してから、信号強度を表示することです。しかし、私はこの奇妙な振る舞いの説明とそれに対する可能な解決策を知りたいです。

4

2 に答える 2