Holen Sie sich die Signalstärke in Android

Lesezeit: 3 Minuten

Benutzer-Avatar
VIGNESH

Ich möchte die Signalstärke des Geräts an dem Punkt abrufen, an dem ich den API-Aufruf treffe. Ich habe alle verwandten Threads durchsucht und bin noch nicht erfolgreich.

Also ich würde gerne die Signalstärke bekommen wie

SignalStrength ss = null  ; // some initialization

int n = ss.getGsmSignalStrength();

Aber während ich dies verwende, ist es offensichtlich, dass ich eine Nullzeiger-Ausnahme bekomme, seit ich initialisiert habe SignalStrength als null. Aber ich weiß nicht, wie ich das initialisieren soll.

Auch die möchte ich nicht verwenden PhoneStateListener weil es nur ausgelöst wird, wenn sich das Signal ändert.

Ich erhalte die Signalstärke mit dem folgenden Code

TelephonyManager telephonyManager = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
CellInfoGsm cellinfogsm = (CellInfoGsm)telephonyManager.getAllCellInfo().get(0);
CellSignalStrengthGsm cellSignalStrengthGsm = cellinfogsm.getCellSignalStrength();
cellSignalStrengthGsm.getDbm();

Aber ich möchte nicht verwenden CellSignalStrength weil es nur in API Level 17 hinzugefügt wird und nicht unter 17 funktioniert. Ich möchte, dass der Code auf API Level 7+ funktioniert.

Oder gibt es eine andere Methode, mit der ich die Signalstärke zum Zeitpunkt des Aufrufs des API-Aufrufs abrufen kann?

  • Mögliches Duplikat von Wie bekomme ich die Signalstärke des Mobilfunkdienstes in Android?

    – bladibla

    6. November 2013 um 6:57 Uhr


  • @blahdiblah: aber ich möchte phonestatelistener nicht verwenden. Ich habe diesen Link verwiesen und das würde mir nicht helfen.

    – VIGNESH

    6. November 2013 um 9:52 Uhr

  • Du sagtest, du wolltest es nicht verwenden PhoneStateListener weil es nur bei Änderungen ausgelöst wird, aber wie diese andere Frage andeutet, wird es ausgelöst, wenn Ihre App gestartet wird. An diesem Punkt sollten Sie sich nur darum kümmern, wenn es sich ändert.

    – bladibla

    6. November 2013 um 17:46 Uhr

Benutzer-Avatar
vrbsm

public class PhoneCustomStateListener extends PhoneStateListener {

    public int signalSupport = 0;

    @Override
    public void onSignalStrengthsChanged(SignalStrength signalStrength) {
        super.onSignalStrengthsChanged(signalStrength);

        signalSupport = signalStrength.getGsmSignalStrength();
        Log.d(getClass().getCanonicalName(), "------ gsm signal --> " + signalSupport);

        if (signalSupport > 30) {
            Log.d(getClass().getCanonicalName(), "Signal GSM : Good");


        } else if (signalSupport > 20 && signalSupport < 30) {
            Log.d(getClass().getCanonicalName(), "Signal GSM : Avarage");


        } else if (signalSupport < 20 && signalSupport > 3) {
            Log.d(getClass().getCanonicalName(), "Signal GSM : Weak");


        } else if (signalSupport < 3) {
            Log.d(getClass().getCanonicalName(), "Signal GSM : Very weak");


        }
    }
}

Benutzer-Avatar
Manuel Schmitzberger

Das hat bei mir funktioniert:

Welche Leistungen werden benötigt:

ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

So erfassen Sie die Metriken:

public void startGatherMetrics() {
    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
    if (networkInfo != null) {
        networkInfoStr = connectivityManager.getActiveNetworkInfo().toString();

        // gather Network Capabilities
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
            Network network = connectivityManager.getActiveNetwork();
            networkInfoStr += "; " + connectivityManager.getNetworkCapabilities(network).toString();
        }
    }
    Log.d("A_NETWORK_INFO", networkInfoStr);

    new Thread(new Runnable() {
        @Override
        public void run() {
            quitLooper = false;
            Looper.prepare();
            telephonyManager.listen(new PhoneStateListener() {
                @Override
                public void onSignalStrengthsChanged(SignalStrength signalStrength) {
                    super.onSignalStrengthsChanged(signalStrength);
                    Log.d("A_NETWORK_METRICS",
                        "Signal Strength (0-4 / dBm):" + getLevel(signalStrength) + "https://stackoverflow.com/"
                            + getDbm(signalStrength));

                    if (quitLooper)
                        Looper.myLooper().quit();
                }
            }, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);

            Looper.loop();
        }
    }).start();

}

public void stop() {
    quitLooper = true;
}

Das “getLevel (Signalstärke)” und “getDbm(signalStärke)” kann gefunden werden hier.

Benutzer-Avatar
Reegan29

Global definieren:

TelephonyManager telephonyManager;
myPhoneStateListener psListener;
TextView txtSignalStr;

onCreate Methode :

@Override
protected void onCreate(final Bundle savedInstanceState) {
 txtSignalStr = (TextView)findViewById(R.id.signalStrength);
 psListener = new myPhoneStateListener();
 telephonyManager = (TelephonyManager)getActivity().getSystemService(Context.TELEPHONY_SERVICE);
 telephonyManager.listen(psListener,PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
}

Erstellen myPhoneStateListener Klasse :

public class myPhoneStateListener extends PhoneStateListener {
    public int signalStrengthValue;

    public void onSignalStrengthsChanged(SignalStrength signalStrength) {
        super.onSignalStrengthsChanged(signalStrength);
        if (signalStrength.isGsm()) {
            if (signalStrength.getGsmSignalStrength() != 99)
                signalStrengthValue = signalStrength.getGsmSignalStrength() * 2 - 113;
            else
                signalStrengthValue = signalStrength.getGsmSignalStrength();
        } else {
            signalStrengthValue = signalStrength.getCdmaDbm();
        }
        txtSignalStr.setText("Signal Strength : " + signalStrengthValue);
    }
}

Sie instanziieren SignalStrength nicht (und möglicherweise können Sie das nicht). aus Anwendungscode.

Sie müssen einen PhoneStateListener (Unterklasse) verwenden und onSignalStrengthsChanged implementieren:

http://developer.android.com/reference/android/telephony/PhoneStateListener.html#onSignalStrengthsChanged(android.telephony.SignalStrength)

Eine Signalstärke wird für Sie erstellt und an Ihre Überschreibung übergeben.

1010530cookie-checkHolen Sie sich die Signalstärke in Android

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy