如何在AOSP中修改启动顺序:我将在启动Launcher2应用程序之前添加自定义应用程序(注册应用程序 - 登录名和密码,将发送到服务器以进行授权)。我怎样才能做到这一点? 我知道ActivityManager管理要启动的Activity,但我不知道应该在哪里开始我的应用程序。我需要在android系统启动完成后立即启动我的应用程序。
答案 0 :(得分:4)
在ICS中,startHomeActivityLocked
中有一个名为ActivityManagerService
的方法。在该方法中,ActivityManagerService
将通过发送android.intent.category.HOME
意图启动Launcher2应用程序。
boolean startHomeActivityLocked(int userId) {
....
intent.setComponent(mTopComponent);
if (mFactoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL) {
intent.addCategory(Intent.CATEGORY_HOME);
}
ActivityInfo aInfo =
resolveActivityInfo(intent, STOCK_PM_FLAGS, userId);
if (aInfo != null) {
intent.setComponent(new ComponentName(
aInfo.applicationInfo.packageName, aInfo.name));
// Don't do this if the home app is currently being
// instrumented.
aInfo = new ActivityInfo(aInfo);
aInfo.applicationInfo = getAppInfoForUser(aInfo.applicationInfo, userId);
ProcessRecord app = getProcessRecordLocked(aInfo.processName,
aInfo.applicationInfo.uid);
if (app == null || app.instrumentationClass == null) {
intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK);
mMainStack.startActivityLocked(null, intent, null, aInfo,
null, null, 0, 0, 0, 0, null, false, null);
}
}
}
因此,您可以在该方法中或在该方法的调用站点之前添加代码。特别是,您可以替换意图以使ActivityManagerService
启动您的应用程序,而不是Launcher。当您的应用程序完成身份验证时,您可以让您的应用程序向Launcher2发送意图。
在gingerbread中,方法签名为boolean startHomeActivityLocked()
,因为Android在此版本中不支持多个用户。