以下分析是基于MTK Android4.4原生的SystemUI与Google 的SystemUI有微小的区别,但两者的整体框架是差不多的。
这一篇是分析SystemUI的第一篇,先从最简单的PowerUI着手,源码路径:/frameworks/base/packages/SystemUI 程序目录结构如下:
我导入Eclipse编辑,报错的原因是因为找不到Framework上的一些包和资源,这个没有关系;修改完后在使用mmm模块编译,再push到手机(eng版本)上进行调试,push后需要重启才能生效。
在AndroidManifest.xml上没有Activity注册
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
所以整个程序启动是从外部启动SystemUIService的。那么是如何启动SystemUIService的呢?看下这个文件:/frameworks/base/services/java/com/android/server/SystemServer.java在这个文件中可以找到
static final void startSystemUi(Context context) {
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.android.systemui",
"com.android.systemui.SystemUIService"));
//Slog.d(TAG, "Starting service: " + intent);
context.startServiceAsUser(intent, UserHandle.OWNER);
}
所以SystemUI在SystemService启动时就被调用了。
SystemUIService的关键代码如下:
package com.android.systemui;
import android.app.Service;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.IBinder;
import android.util.Log;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.HashMap;
public class SystemUIService extends Service {
private static final String TAG = "System