Aosp13 手机sim卡信号格显示修改
工作中,客户要求对信号格显示偏弱不够友好为由,提出修改,要求使其显示信号强一些。
在此记录
一问题:
修改系统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_intparameters_use_for_5g_nr_signal_bar_int = 1parameters_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 */@Overridepublic 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;}
。。。。。。。