[DESCRIPTION]


目前android信号格默认是4格,如何客制化为5格呢?
由于SystemUI仅仅是根据telephony那边传递过来的信号强度值去决定icon并加以显示,因此要实现这一功能主要要分2步完成:telephony模块和Systemui模块。


 


[SOLUTION]



一,针对L之前的版本修改:


1、修改telephony模块信号处理部分,这部分可以参考:FAQ09157



2、修改Systemui信号显示部分。


SystemUI的资源调用一共有2种方式,运营商定制以及系统默认。二者的差别是图片资源位置不同,获取资源的接口不同。


但都是根据信号强度iconLevel去获取图片资源。
具体可能修改到地方有:
 (1)、KK以前:NetworkControllerGemini.java(alps\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\policy)


           KK之后: NetworkController.java (alps\frameworks\base\packages\systemui\src\com\android\systemui\statusbar\policy) 


          
     private final void updateTelephonySignalStrength(int slotId)
     ……


     在这个函数里面,大致有tempLastSignalLevel[0] 、iconLevel[0]、tempPhoneSignalIconId[0]这几变量会用到,需要相应的处理
     如系统默认的资源调用接口为:

} else {
                         iconList[0] = TelephonyIconsGemini.getTelephonySignalStrengthIconList(simColorId, false);
                         tempPhoneSignalIconId[0].setResources(null);
                         if (iconLevel[0] < 5) {
                             tempPhoneSignalIconId[0].setIconId(iconList[0][iconLevel[0]]);
                         }


   (2) 、根据sim卡属性获取图片资源


    

TelephonyIconsGemini.java alps\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\policy
 
       public static int[] getTelephonySignalStrengthIconList(int simColorId, boolean showSimIndicator) {
         if (showSimIndicator) {
             return TELEPHONY_SIGNAL_STRENGTH_WHITE;
         } else {
             return TELEPHONY_SIGNAL_STRENGTH[simColorId];
         }
     }


需要新增图片资源


 

private static final int[] TELEPHONY_SIGNAL_STRENGTH_WHITE = {
         R.drawable.stat_sys_gemini_signal_0,
         R.drawable.stat_sys_gemini_signal_1_white,
         R.drawable.stat_sys_gemini_signal_2_white,
         R.drawable.stat_sys_gemini_signal_3_white,
         R.drawable.stat_sys_gemini_signal_4_white };
     /** Signal level icons for normal. @{ */

 


二,针对L版本修改:


1、修改telephony模块信号处理部分,这部分可以参考:FAQ09157
2、修改Systemui信号显示部分。


PS:L上图片采用向量图表示,当然也可以用png图片。


根据需求制作信号格的图片, 类型可以为png,分辨率能适应你的设备就行。


同时还要修改下面的数组,根据你的需求增加图片。


2.1 TelephonyIcons.java


(alps\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\policy)

 public class TelephonyIcons {
 //***** Signal strength icons
 /// M: config for show the ! icon or not @{ 
//修改状态栏信号格
 static final int[] TELEPHONY_SIGNAL_STRENGTH_EXCLAMATION = {
 R.drawable.stat_sys_signal_0,
 R.drawable.stat_sys_signal_1,
 R.drawable.stat_sys_signal_2,
 R.drawable.stat_sys_signal_3,
 R.drawable.stat_sys_signal_4,
 };
 static final int[] TELEPHONY_SIGNAL_STRENGTH_FULL = {
 R.drawable.stat_sys_signal_0_fully,
 R.drawable.stat_sys_signal_1_fully,
 R.drawable.stat_sys_signal_2_fully,
 R.drawable.stat_sys_signal_3_fully,
 R.drawable.stat_sys_signal_4_fully,
 };

 ............ 
//修改下拉状态栏信号格
 static final int[] QS_TELEPHONY_SIGNAL_STRENGTH_EXCLAMATION = {
 R.drawable.ic_qs_signal_0,
 R.drawable.ic_qs_signal_1,
 R.drawable.ic_qs_signal_2,
 R.drawable.ic_qs_signal_3,
 R.drawable.ic_qs_signal_4,
 };

 static final int[] QS_TELEPHONY_SIGNAL_STRENGTH_FULL = {
 R.drawable.ic_qs_signal_full_0,
 R.drawable.ic_qs_signal_full_1,
 R.drawable.ic_qs_signal_full_2,
 R.drawable.ic_qs_signal_full_3,
 R.drawable.ic_qs_signal_full_4,
 };


2.2  AccessibilityContentDescriptions .java


(alps\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\policy)


 这里数组长度要必须和TelephonyIcons 修改的数组长度一致。


 


public class AccessibilityContentDescriptions {

 private AccessibilityContentDescriptions() {}
 static final int[] PHONE_SIGNAL_STRENGTH = {
 R.string.accessibility_no_phone,
 R.string.accessibility_phone_one_bar,
 R.string.accessibility_phone_two_bars,
 R.string.accessibility_phone_three_bars, 
//比如:如果上面数组长度是6的话,这里也应该修改长度为6
 
//add 
 
R.string.accessibility_phone_four_bars,
 
//add end
 R.string.accessibility_phone_signal_full
 };


PS:该accessibility_phone_four_bars  string 也应该在资源文件定义。