文件中加资源:
. frameworks\base\core\res\res\drawalbe 中添加系统图标的图片资源
. frameworks\base\core\res\res\values\config.xml 中添加图片引用,这些 icon 在这个 string array 的位置就决定了其在 status bar 上显示的位置了。我们可以从 code 里面得出该结论。所以当你要调换 icon 的顺序时,改动这个 config.xml 就可以了。在 StatusBarManagerService 初始化的时候就会读取 config.xml 下 icons 的 String array 。
这个文件中加代码: systemui/status/bar/phone/PhoneStatusBarPolicy.java 以闹钟为例。
. 在 PhoneStatusBarPolicy.java 中初始化所增加的系统图标
. 在构造函数中 SetIcon
. StatusBarPolicy 调用 registerReceiver 注册了感兴趣的 intent, 当感兴趣的 intent 发生时,对图标进行更新。例如,设置一个闹钟后,闹钟模块会发出一个叫做 Intent.ACTION_ALARM_CHANGED 的广播,然后 StatusBarPolicy接收到此广播,继而更新状态栏上的闹钟图标。
………
// Alarm clock StatusBarPolicy 构造方法中初始化闹钟图标
mService.setIcon("alarm_clock",R.drawable.stat_notify_alarm, 0);
mService.setIconVisibility("alarm_clock", false);
……..
// StatusBarPolicy 构造方法中注册闹钟改变广播
filter.addAction(Intent.ACTION_ALARM_CHANGED);
…....
. 添加 图标更新函数
private final void updateAlarm(Intent intent) {
boolean alarmSet = intent.getBooleanExtra(“alarmSet”, false);
mService.setIconVisibility(“alarm_clock”, alarmSet);
}
以上是在状态栏添加显示的系统图标的步骤。
代码执行步骤:
StatusBarManagerService.java 中
StatusBarIconList mIcons = new StatusBarIconList();
………
mIcons.defineSlots(res.getStringArray(com.Android.internal.R.array.config_statusBarIcons));
StatusBarPolicy.java -- > setIcon(…)
StatusBarManager.java -- > setIcon(…)
StatusBarManagerService.java -- > setIcon(…)
在 StatusBarService 的onCreate 的时候调用StatusBarManagerService 中的 registerStatusBar (…)
Statusbar 中的控制开关会做详细的描述,这里就不在赘述。