首页 > 解决方案 > 使用 startActivityForResult() 在 Activity 开始之前显示 MainActivity 的 Android 应用

问题描述

我正在使用 FirebaseUI Auth 在我的应用中实现登录流程。为了真正开始登录流程,我首先创建了一个AuthStateListener

authStateListener = FirebaseAuth.AuthStateListener { authObj ->
            val currUser = authObj.currentUser
            if (currUser == null)
                startActivityForResult(
                    AuthUI.getInstance()
                        .createSignInIntentBuilder()
                        .setAvailableProviders(providers)
                        .build(),
                    SIGN_IN
                )
}

然后我将authStateListener对象附加到FirebaseAuth实例中onResume(),就像这样

override fun onResume() {
        super.onResume()
        FirebaseAuth.getInstance().addAuthStateListener(authStateListener)
}

即使这样,在启动应用程序时,首先会出现 MainActivity,然后几秒钟后才会出现 FirebaseUI 活动。

总之,我的问题是如何使FirebaseUI活动成为用户在启动应用程序时看到的第一个活动,而不是 MainActivity?

感谢您考虑我的问题!

标签: androidkotlinandroid-activityfirebaseui

解决方案


如果您想在用户打开应用程序时显示 FirebaseUIActivity,您需要从 Manifest 文件中的 MainActivity 条目中删除以下代码,并将其添加到您的 FirebaseUIActivity。

intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

所以你的主要活动将变成

<activity android:name=".MainActivity"/>

你的 FirebaseUIActivity 将变成

<activity android:name=".FirebaseUIActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

一旦你完成了,你需要调用 startActivity 而不是 startActivityForResult()


推荐阅读