如何在AOSP中的启动器之前添加我的应用程序

时间:2013-04-19 16:47:17

标签: android android-source

如何在AOSP中修改启动顺序:我将在启动Launcher2应用程序之前添加自定义应用程序(注册应用程序 - 登录名和密码,将发送到服务器以进行授权)。我怎样才能做到这一点? 我知道ActivityManager管理要启动的Activity,但我不知道应该在哪里开始我的应用程序。我需要在android系统启动完成后立即启动我的应用程序。

1 个答案:

答案 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在此版本中不支持多个用户。