我已经将Android新的闪屏API集成到了我的应用程序中.现在,我想将用户重定向到登录屏幕,如果用户已经登录,或者如果用户在完成闪屏API执行后没有登录,则重定向到注册屏幕.

这是我为闪屏API定义的主题

    <style name="Theme.CustomSplashScreen" parent="Theme.SplashScreen">
        <item name="windowSplashScreenAnimatedIcon">@drawable/splash_logo</item>
        <item name="windowSplashScreenAnimationDuration">5000</item>
        <item name="postSplashScreenTheme">@style/Theme.SanskarEducation</item>
    </style>

以下是该活动的代码

    @RequiresApi(Build.VERSION_CODES.S)
    override fun onCreate(savedInstanceState: Bundle?) {
        val splash = installSplashScreen()
        splash.setKeepOnScreenCondition { false }
        setupSplashScreen()
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_login)
        initialSetup()
    }

    @RequiresApi(Build.VERSION_CODES.S)
    private fun setupSplashScreen() {
        splashScreen.setOnExitAnimationListener { splashScreenView ->
            val slideUp = ObjectAnimator.ofFloat(
                splashScreenView,
                View.TRANSLATION_Y,
                0f,
                -splashScreenView.height.toFloat()
            )
            slideUp.interpolator = AnticipateInterpolator()
            slideUp.duration = 800L
            slideUp.doOnEnd { splashScreenView.remove() }
            slideUp.start()
        }
    }

我也try 过使用以下代码,但不起作用.它总是只重定向到登录屏幕.

val splash = installSplashScreen()
splash.setKeepOnScreenCondition { false }

我想知道我可以把我的条件放在哪里,以判断用户是否登录,以便我可以将用户重定向到特定屏幕.

先谢谢你

推荐答案

你可以在onCreate个启动器活动中做到这一点.因此,当用户看到闪屏时,您可以进行API调用并决定打开哪个活动.

@RequiresApi(Build.VERSION_CODES.S)
override fun onCreate(savedInstanceState: Bundle?) {
    navigateToCorrectScreen()
    val splash = installSplashScreen()
    splash.setKeepOnScreenCondition { false }
    setupSplashScreen()
    super.onCreate(savedInstanceState)
    binding = DataBindingUtil.setContentView(this, R.layout.activity_login)
    initialSetup()
}

navigateToCorrectScreen中,你可以进行API调用并决定要打开的活动,

private fun navigateToCorrectScreen() {
    val isLoggedIn = false // Implement your login status check here
    val targetActivity = if (isLoggedIn) {
        // User is logged in, redirect to the main activity
        MainActivity::class.java
    } else {
        // User is not logged in, redirect to the login activity
        LoginActivity::class.java
    }
    val intent = Intent(this, targetActivity)
    startActivity(intent)
    finish() // Finish the splash screen activity
}

现在,如果您认为可能会出现闪屏消失但未收到API响应的情况,您可以通过多种方式进行处理.下面列出了一些方法.

  1. 只有在接口响应后才能查看是否可以移除闪屏
  2. 当您收到响应并决定go 哪里时,您可以向该活动显示与启动相同的进度或图标.

Android相关问答推荐

将动作传递给嵌套的可组合物

try 用Jetpack Compose理解视图模型和导航

如何从Android 12的来电中获取电话号码?

BroadCastReceiver的onReceive方法中的Intent上的Extras为空

在Jetpack Compose中从LazyColumn中删除项目时发生IndexOutOf边界异常

(已解决)从最近的应用程序打开应用程序时出错

看不到选项菜单栏

为什么我在 android 中使用 TabLayout 时无法启动我的 Activity?

如何将 Room Persistence 依赖项正确添加到我的 Jetack Compose Android 应用程序

如何迭代 SqlDelight Select 结果而不将所有内容加载到内存中?

可组合函数无限地从视图模型获取值

使用 Dagger Hilt 获取接口的所有实例

在 Jetpack Compose 中重用具有重复代码的列

为什么项目捕获对象给我在 Compose 中找不到参考

Kotlin Compose 全局页脚视图

Android Compose webview 被拉伸

我的自定义视图没有显示我应该如何修复它?

Android TTS 在屏幕关闭一段时间后停止朗读

lambda 函数中的类型不匹配 - Kotlin

如何在 Kotlin 中使用反向绑定适配器将小写文本转换为大写?