1

AOSP でブート シーケンスを変更する方法: Launcher2 アプリケーションを開始する前に、カスタム アプリケーション (登録アプリ - ログインとパスワード。認証のためにサーバーに送信されます) を追加します。これどうやってするの?ActivityManager がどのアクティビティを開始するかを管理していることは知っていますが、アプリケーションをどこから開始すればよいかわかりません。Android システムの起動が完了した直後にアプリケーションを起動する必要があります。

4

1 に答える 1

4

ICS には、startHomeActivityLockedinという名前のメソッドがありActivityManagerServiceます。そのメソッドでは、インテントActivityManagerServiceを送信して Launcher2 アプリケーションを開始します。android.intent.category.HOME

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 にインテントを送信することができます。

boolean startHomeActivityLocked()ジンジャーブレッドでは、Android がこのビルドで複数のユーザーをサポートしていないため、メソッド シグネチャがあります。

于 2013-04-20T00:53:45.403 に答える