在切换到 3G 的网络时,使用 Network Info Widge app测试 3G 的信号强度与设置中显示的信号强度不一致,而切换到 2G 或 4G 网络时,信号强度显示是一致。经分析导致 3G 网络显示信号强度不一致的原因是第三方 app 和设置中获取信号强度的计算公式不一样导致。
设置 中的3G 网络计算信号强度公式为:dBm = gsmRscpQdbm / 4,而第三方获取 3G 网络计算信号强度公式为:dBm = -113 + (2 * asu)。因此解决此问题的方法只需把设置 3G 网络计算信号强度公式修改为 dBm = -113 + (2 * asu)即可,此方法的修改不会影响到信号格显示的问题。
具体修改方法如下:
- alps/vendor/mediatek/proprietary/frameworks/base/packages/FwkPlugin/src/com/mediatek/op/telephony/DefaultServiceStateExt.java
--- a/alps/vendor/mediatek/proprietary/frameworks/base/packages/FwkPlugin/src/com/mediatek/op/telephony/DefaultServiceStateExt.java
+++ b/alps/vendor/mediatek/proprietary/frameworks/base/packages/FwkPlugin/src/com/mediatek/op/telephony/DefaultServiceStateExt.java
@@ -304,7 +304,10 @@ public class DefaultServiceStateExt implements IServiceStateExt {
int dBm;
Log.d(TAG, "mapGsmSignalDbm() gsmRscpQdbm=" + gsmRscpQdbm + " asu=" + asu);
if (gsmRscpQdbm < 0) {
- dBm = gsmRscpQdbm / 4; //Return raw value for 3G Network
+ //dBm = gsmRscpQdbm / 4; //Return raw value for 3G Network
+ dBm = -113 + (2 * asu);
} else {
dBm = -113 + (2 * asu);
}
- alps/vendor/mediatek/proprietary/operator/OP01/frameworks/packages/FwkPlugin/src/com/mediatek/op/telephony/ServiceStateExtOP01.java
--- a/alps/vendor/mediatek/proprietary/operator/OP01/frameworks/packages/FwkPlugin/src/com/mediatek/op/telephony/ServiceStateExtOP01.java
+++ b/alps/vendor/mediatek/proprietary/operator/OP01/frameworks/packages/FwkPlugin/src/com/mediatek/op/telephony/ServiceStateExtOP01.java
@@ -129,7 +129,10 @@ public class ServiceStateExtOP01 extends DefaultServiceStateExt {
int dBm;
if (gsmRscpQdbm < 0) {
- dBm = gsmRscpQdbm / 4; // Return raw value for TDD 3G network.
+ //dBm = gsmRscpQdbm / 4; // Return raw value for TDD 3G network.
+ dBm = -113 + (2 * asu);
} else {
dBm = -113 + (2 * asu);
}