如何在 AOSP 中修改启动顺序:在启动 Launcher2 应用程序之前,我将添加自定义应用程序(注册应用程序 - 登录名和密码,将发送到服务器进行授权)。我怎样才能做到这一点?我知道 ActivityManager 管理要启动的 Activity,但我不知道应该在哪里启动我的应用程序。我需要在 android 系统启动完成后立即启动我的应用程序。
问问题
2363 次
1 回答
4
在 ICS 中,有一个名为startHomeActivityLocked
in的方法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
启动您的应用程序,而不是启动器。当您的应用程序完成身份验证后,您可以让您的应用程序向 Launcher2 发送一个意图。
在姜饼中,方法签名是boolean startHomeActivityLocked()
因为 Android 在此构建中不支持多用户。
于 2013-04-20T00:53:45.403 回答