
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?

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

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.

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.
10105300cookie-checkHolen Sie sich die Signalstärke in Androidyes
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