1

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

4

1 回答 1

4

在 ICS 中,有一个名为startHomeActivityLockedin的方法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 回答