工作中,客戶要求對信號格顯示偏弱不夠友好為由,提出修改,要求使其顯示信號強一些。
在此記錄? ? ? ? ? ? ??
一問題:
修改系統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;}
。。。。。。。