关于android手机mtk平台 信号格数的修改

最近的一个新需求,需要把android原生的四个信号条改为五格信号条,一下是本人的解决方案:(注;这里主要是针对gsm网络)

       android 2.3:
                        a.  modem底层上报信号参数RSSI给modem L4
                        b.  在modem L4中,经过计算的到上报给上层的asu值,asu的范围是0-31,计算公式为:
                        asu = (-113 + RSSI) / 2
                        c.  在SatusBarPolicy.java中的updateSignalStrength(int simId)方法中(单卡情况为updateSignalStrength()),将asu值转化为信号格数,将asu的取值范围对应相应iconlevel就ok了
               2.3就不做详细描述了 ,具体修改参考android 4. 0 

      android 4.0:
                      a:首先 frameworks/base/telephony/java/android/telephony/SignalStrength.java
                      public int getGsmLevel() {
                                                          int level;
                                                         // ASU ranges from 0 to 31 - TS 27.007 Sec 8.5
                                                         // asu = 0 (-113dB or less) is very weak
                                                        // signal, its better to show 0 bars to the user in such cases.
                                                       // asu = 99 is a special case, where the signal strength is unknown.
                                                       int asu = getGsmSignalStrength();
        
       
                                                        try{
                                                              level = mServiceStateExt.mapGsmSignalLevel(asu);//主要的函数在这里

                                                            } catch (Exception e){
                                                               if (asu <= 2 || asu == 99) level = SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
                                                              else if (asu >= 16) level = SIGNAL_STRENGTH_HIGHEST;  //具体的转换关系 asu=(-113+assi)/2
                                                              else if (asu >= 12) level = SIGNAL_STRENGTH_GREAT;
                                                              else if (asu >= 8)  level = SIGNAL_STRENGTH_GOOD;
                                                               else if (asu >= 5)  level = SIGNAL_STRENGTH_MODERATE;
                                                               else level = SIGNAL_STRENGTH_POOR;
                                                            }
        
        
                                                      return level;
                                                   }
                      b:mServiceStateExt 的具体实例在 mediatek/frameworks/base/op/java/com/mediatek/op/telephony/ServiceStateExt.java
                                                   修改: mapGsmSignalLevel(int asu){...}
                     c:上层的修改主要在SystemUI模块

                                  主要文件有:networkcontroller.java  networkcontrollergemini.java 这里只需修改 判断条件就ok了 主要的原始的为if(iconlevel<5)-->if(iconlevel<6)
                                                       telephonyicons.java   telephonyiconsgemini.java   大家只需打开文件  就明白要修改哪了(主要修改资源文件id数组,由原来的length为五  改为6)

                      到此 就完成了~~~    

http://www.eoeandroid.com/thread-321378-1-1.html

你可能感兴趣的:(关于android手机mtk平台 信号格数的修改)