我设计了一个具有自己独立活动(初始活动)的初始屏幕:
class SplachActivity:AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
setTheme(R.style.AppTheme)
val user = FirebaseAuth.getInstance().currentUser
if (user != null)
{
AuthUI.getInstance().signOut(this)
val startIntent = Intent(this,MainActivity::class.java)
startIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(startIntent)
finish()
}
else
{
val providers = arrayListOf(AuthUI.IdpConfig.EmailBuilder().build(), AuthUI.IdpConfig.GoogleBuilder().build())
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.setLogo(R.drawable.ic_calculate)
.setIsSmartLockEnabled(false)
.setAvailableProviders(providers)
.build(),
0)
}
super.onCreate(savedInstanceState)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(requestCode == 0)
{
val response = IdpResponse.fromResultIntent(data)
if(resultCode == Activity.RESULT_OK)
{
val startIntent = Intent(this,MainActivity::class.java)
startIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(startIntent)
finish()
}
else
{
if (response != null) {
Log.e("LogIn Error","${response.error?.errorCode}")
}
}
}
}
如您所见,此初始屏幕在充当启动器的同时,还充当了一项活动,如果用户未登录,它将使用户进入登录屏幕。
但是,我试图阻止用户返回此活动(由于此活动没有布局,因此请按返回按钮)。我尝试了以下方法:
<activity android:name=".SplachActivity"
android:theme="@style/AppTheme" android:noHistory="true" android:excludeFromRecents="true">
</activity>
但是通过这样做,该活动将在导航后被杀死,这导致永不调用onActivityResult()。
因此,我不确定该如何做才能不终止该活动,但仍然阻止用户返回该活动(在登录期间和登录后),因为我无法更改提供的身份验证程序由Firebase提供。
谢谢!