以百分比显示Android的getGsmSignalStrength()值
作者:互联网
根据getGsmSignalStrength()的相应dBm值,比例似乎是线性的. (参见dBm值here).
但我观察到,在几乎所有应用中,这个比例并没有用作线性比例.
例如,考虑Android的src StatusBarPolicy::updateSignalStrength
signal strength = 0 or 99 -> no signal
signal strength >= 12 -> very good signal
signal strength >= 8 -> good signal
signal strength >= 5 -> poor signal
signal strength <5 -> very poor signal
任何人都可以帮我找出我可以用百分比显示信号强度的比例.
解决方法:
信号强度的值以dBm表示.这意味着它处于对数比例.
它是对数的,允许表示非常大且非常小的值.
对数刻度表示:
增加100W的功率会给你20dBm;
但增加功率1000W不会给你200dBm但是30dBm.
如果将对数刻度转换为线性刻度,则将失去表示宽范围值的能力.但是,如果你想这样做,这是一个算法:
final double pMax = Math.pow(10d, 31/10d);
if (gsmSignalStrength == 99) {
return -1;
}
double r = Math.pow(10d, gsmSignalStrength/10d) / pMax; // value <0,1>
return (float) r;
参考文档:https://www.etsi.org/deliver/etsi_ts/127000_127099/127007/08.05.00_60/ts_127007v080500p.pdf第82页
标签:android,gsm,signal-strength 来源: https://codeday.me/bug/20190621/1252811.html