有没有人知道如何获得信号强度而无需调用onSignalStrengthChanged。 onSignalStrengthchanged的问题在于它在信号强度变化时被调用,我需要根据不同的标准获得signalstrength的值。
提前致谢。
答案 0 :(得分:12)
在API级别17 上,这里有一些代码可以在Activity
(或任何其他Context
子类中使用):
import android.telephony.CellInfo;
import android.telephony.CellInfoCdma;
import android.telephony.CellInfoGsm;
import android.telephony.CellInfoLte;
import android.telephony.CellSignalStrengthCdma;
import android.telephony.CellSignalStrengthGsm;
import android.telephony.CellSignalStrengthLte;
import android.telephony.TelephonyManager;
try {
final TelephonyManager tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
for (final CellInfo info : tm.getAllCellInfo()) {
if (info instanceof CellInfoGsm) {
final CellSignalStrengthGsm gsm = ((CellInfoGsm) info).getCellSignalStrength();
// do what you need
} else if (info instanceof CellInfoCdma) {
final CellSignalStrengthCdma cdma = ((CellInfoCdma) info).getCellSignalStrength();
// do what you need
} else if (info instanceof CellInfoLte) {
final CellSignalStrengthLte lte = ((CellInfoLte) info).getCellSignalStrength();
// do what you need
} else {
throw new Exception("Unknown type of cell signal!");
}
}
} catch (Exception e) {
Log.e(TAG, "Unable to obtain cell signal information", e);
}
Android的早期版本要求您调用侦听器,没有其他选择(请参阅this link)。
还要确保您的应用程序包含适当的权限。
答案 1 :(得分:0)
您可以通过反射调用访问SignalStrength。请仔细阅读实施链接http://blog.ajhodges.com/2013/03/reading-lte-signal-strength-rssi-in.html
答案 2 :(得分:0)
Android中还有另一个名为CellInfo的API。但我不确定OnSignalStrengthsChanged()和CellInfo返回的信号强度是否相同。
https://developer.android.com/reference/android/telephony/CellSignalStrength.html
答案 3 :(得分:0)
根据上述安德烈(Andre)的回答,在Kotlin中,您可以使用这种一线式(同样是API 17 +):
fun getRadioSignalLevel(): Int {
return when (val info = telephonyManager.allCellInfo?.firstOrNull()) {
is CellInfoLte -> info.cellSignalStrength.level
is CellInfoGsm -> info.cellSignalStrength.level
is CellInfoCdma -> info.cellSignalStrength.level
is CellInfoWcdma -> info.cellSignalStrength.level
else -> 0
}
}