Aosp13 手机sim卡信号格显示修改

发布于:2025-09-15 ⋅ 阅读:(26) ⋅ 点赞:(0)

工作中,客户要求对信号格显示偏弱不够友好为由,提出修改,要求使其显示信号强一些。

在此记录              

一问题:

修改系统sim卡显示的信号格,在设备其他配置不变的情况下,使其信号格显示比原有的要优秀

二 分析

我们在Framework/base 下找到控制信号格显示的地方,修改阈值使其显示变更

涉及类如下:

/frameworks/base/telephony/java/android/telephony/CellSignalStrengthNr.java

/frameworks/base/telephony/java/android/telephony/SignalStrength.java

1 确定当前信号格显示的判断依据:

PS C:\Users\86186> adb shell dumpsys carrier_config | findStr parameters_use_for_5g_nr_signal_bar_int
            parameters_use_for_5g_nr_signal_bar_int = 1
            parameters_use_for_5g_nr_signal_bar_int = 1

执行如上指令,返回值是1 

2 我们在CellSignalStrengthNr中发现如下:

/**
     * Indicates SSRSRP is considered for {@link #getLevel()} and reporting from modem.
     *
     * @hide
     */
    public static final int USE_SSRSRP = 1 << 0; //十进制 1
    /**
     * Indicates SSRSRQ is considered for {@link #getLevel()} and reporting from modem.
     *
     * @hide
     */
    public static final int USE_SSRSRQ = 1 << 1;//十进制 2
    /**
     * Indicates SSSINR is considered for {@link #getLevel()} and reporting from modem.
     *
     * @hide
     */
    public static final int USE_SSSINR = 1 << 2;//十进制 4

根据设备返回值是1,说明系统信号格使用的是SSRSRP属性判断

先解释下 这三个属性的意义

  • RSRP(Reference Signal Received Power,参考信号接收功率)

  • RSRQ(Reference Signal Received Quality,参考信号接收质量)

  • SINR(Signal to Interference plus Noise Ratio,信号干扰噪声比)

3 那么系统是在哪里设置的呢,

/androidDev/android_source/POCft18/frameworks/base/telephony/java/android/telephony/CarrierConfigManager.java

..............
public static final class Bsf {
............
sDefaults.putIntArray(KEY_LTE_RSRP_THRESHOLDS_INT_ARRAY,
                new int[] {
                        -128, /* SIGNAL_STRENGTH_POOR */
                        -118, /* SIGNAL_STRENGTH_MODERATE */
                        -108, /* SIGNAL_STRENGTH_GOOD */
                        -98,  /* SIGNAL_STRENGTH_GREAT */
                });
        sDefaults.putIntArray(KEY_LTE_RSRQ_THRESHOLDS_INT_ARRAY,
                new int[] {
                        -20, /* SIGNAL_STRENGTH_POOR */
                        -17, /* SIGNAL_STRENGTH_MODERATE */
                        -14, /* SIGNAL_STRENGTH_GOOD */
                        -11  /* SIGNAL_STRENGTH_GREAT */
                });
        sDefaults.putIntArray(KEY_LTE_RSSNR_THRESHOLDS_INT_ARRAY,
                new int[] {
                        -3, /* SIGNAL_STRENGTH_POOR */
                        1,  /* SIGNAL_STRENGTH_MODERATE */
                        5,  /* SIGNAL_STRENGTH_GOOD */
                        13  /* SIGNAL_STRENGTH_GREAT */
                });
        sDefaults.putIntArray(KEY_WCDMA_RSCP_THRESHOLDS_INT_ARRAY,
                new int[] {
                        -115,  /* SIGNAL_STRENGTH_POOR */
                        -105, /* SIGNAL_STRENGTH_MODERATE */
                        -95, /* SIGNAL_STRENGTH_GOOD */
                        -85  /* SIGNAL_STRENGTH_GREAT */
                });
        sDefaults.putIntArray(KEY_5G_NR_SSRSRP_THRESHOLDS_INT_ARRAY,
                // Boundaries: [-140 dB, -44 dB]
                new int[] {
                    -110, /* SIGNAL_STRENGTH_POOR */
                    -90, /* SIGNAL_STRENGTH_MODERATE */
                    -80, /* SIGNAL_STRENGTH_GOOD */
                    -65,  /* SIGNAL_STRENGTH_GREAT */
                });
        sDefaults.putIntArray(KEY_5G_NR_SSRSRQ_THRESHOLDS_INT_ARRAY,
                // Boundaries: [-43 dB, 20 dB]
                new int[] {
                    -31, /* SIGNAL_STRENGTH_POOR */
                    -19, /* SIGNAL_STRENGTH_MODERATE */
                    -7, /* SIGNAL_STRENGTH_GOOD */
                    6  /* SIGNAL_STRENGTH_GREAT */
                });
        sDefaults.putIntArray(KEY_5G_NR_SSSINR_THRESHOLDS_INT_ARRAY,
                // Boundaries: [-23 dB, 40 dB]
                new int[] {
                    -5, /* SIGNAL_STRENGTH_POOR */
                    5, /* SIGNAL_STRENGTH_MODERATE */
                    15, /* SIGNAL_STRENGTH_GOOD */
                    30  /* SIGNAL_STRENGTH_GREAT */
                });
        sDefaults.putInt(KEY_PARAMETERS_USE_FOR_5G_NR_SIGNAL_BAR_INT,
                CellSignalStrengthNr.USE_SSRSRP);//5g信号控制类型设置
...........
        

三 方案:

/androidDev/android_source/POCft18/frameworks/base/telephony/java/android/telephony/CellSignalStrengthNr.java 下

。。。。。。。。。。。。。。。。
/** @hide */
    @Override
    public void updateLevel(PersistableBundle cc, ServiceState ss) {
        if (cc == null) {
            mParametersUseForLevel = USE_SSRSRP;
        } else {
            mParametersUseForLevel = cc.getInt(
                    CarrierConfigManager.KEY_PARAMETERS_USE_FOR_5G_NR_SIGNAL_BAR_INT, USE_SSRSRP);
            mSsRsrpThresholds = cc.getIntArray(
                    CarrierConfigManager.KEY_5G_NR_SSRSRP_THRESHOLDS_INT_ARRAY);
            if (VDBG) {
                Rlog.i(TAG, "Applying 5G NR SSRSRP Thresholds: "
                        + Arrays.toString(mSsRsrpThresholds));
            }
            mSsRsrqThresholds = cc.getIntArray(
                    CarrierConfigManager.KEY_5G_NR_SSRSRQ_THRESHOLDS_INT_ARRAY);
            if (VDBG) {
                Rlog.i(TAG, "Applying 5G NR SSRSRQ Thresholds: "
                        + Arrays.toString(mSsRsrqThresholds));
            }
            mSsSinrThresholds = cc.getIntArray(
                    CarrierConfigManager.KEY_5G_NR_SSSINR_THRESHOLDS_INT_ARRAY);
            if (VDBG) {
                Rlog.i(TAG, "Applying 5G NR SSSINR Thresholds: "
                        + Arrays.toString(mSsSinrThresholds));
            }
        }
        int ssRsrpLevel = SignalStrength.INVALID;
        int ssRsrqLevel = SignalStrength.INVALID;
        int ssSinrLevel = SignalStrength.INVALID;
        if (isLevelForParameter(USE_SSRSRP)) {
            int rsrpBoost = 0;
            if (ss != null) {
                rsrpBoost = ss.getArfcnRsrpBoost();
            }
            ssRsrpLevel = updateLevelWithMeasure(mSsRsrp + rsrpBoost, mSsRsrpThresholds);
            if (VDBG) {
                Rlog.i(TAG, "Updated 5G NR SSRSRP Level: " + ssRsrpLevel);
            }
        }
        if (isLevelForParameter(USE_SSRSRQ)) {
            ssRsrqLevel = updateLevelWithMeasure(mSsRsrq, mSsRsrqThresholds);
            if (VDBG) {
                Rlog.i(TAG, "Updated 5G NR SSRSRQ Level: " + ssRsrqLevel);
            }
        }
        if (isLevelForParameter(USE_SSSINR)) {
            ssSinrLevel = updateLevelWithMeasure(mSsSinr, mSsSinrThresholds);
            if (VDBG) {
                Rlog.i(TAG, "Updated 5G NR SSSINR fff Level: " + ssSinrLevel);
            }
        }
        // Apply the smaller value among three levels of three measures.
-        // mLevel = Math.min(Math.min(ssRsrpLevel, ssRsrqLevel), ssSinrLevel);
+        int rsrpLevel;
+        if (mSsRsrp >= -98) {
+            rsrpLevel = SIGNAL_STRENGTH_GREAT;   // 满格
+        } else if (mSsRsrp >= -108) {
+            rsrpLevel = SIGNAL_STRENGTH_GOOD;
+        } else if (mSsRsrp >= -118) {
+            rsrpLevel = SIGNAL_STRENGTH_MODERATE;
+        } else if (mSsRsrp >= -128) {
+            rsrpLevel = SIGNAL_STRENGTH_POOR;
+        } else {
+            rsrpLevel = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
+        }
+        Rlog.i(TAG, "Updated 5G mSsRsrp: " + mSsRsrp + " ;rsrpLevel:" + rsrpLevel);
+        mLevel = rsrpLevel;
    }
。。。。。。。