所以我有一个RegisterActivity
和一个MapsActivity
。
新用户打开应用程序后,他们将在RegisterActivity
上并进行注册。他们注册后,我的应用会创建一个Intent
并将其发送到MapsActivity
问题在于,每当用户关闭应用程序时,他们都必须再次登录/注册。
我希望该应用能够重新打开到MapsActivity
,因为用户尚未退出
这是我的尝试:
我在<intent-filter>
和RegisterActivity
中都放置了MapsActivity
,因为我认为这两个都应该是主要的启动器,这取决于用户是否登录?
RegisterActivity
MapsActivity
AndroidManifest.xml
<application
<activity android:name=".MapsActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".RegisterActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".LoginActivity">
</activity>
</application>
MapsActivity.kt
public override fun onStart() {
super.onStart()
// Check if user is signed in (non-null) and update UI accordingly.
val currentUser = FirebaseAuth.getInstance().currentUser
if(currentUser == null){
Log.d(TAG, "User is not logged in")
val intent = Intent(this, LoginActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
}else {
Log.d(TAG, "User is logged in")
}
}
答案 0 :(得分:1)
我有一个类似的应用程序开发人员,我只是使用启动屏幕检查用户是否已登录,然后打开正确的屏幕。 飞溅不必太复杂:实际上,您甚至可以避免设置视图并仅检查所需的内容。 This article解释得很清楚。
记住要在启动正确的启动活动后在启动活动上调用finish()。
答案 1 :(得分:0)
最简单的方法是使用侦听器。假设您有两个活动,LoginActivity
和MainActivity
。可以在LoginActivity
中创建的侦听器应如下所示:
val authStateListener = FirebaseAuth.AuthStateListener { firebaseAuth ->
val firebaseUser = firebaseAuth.currentUser
if (firebaseUser != null) {
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
finish()
}
}
这基本上意味着,如果用户已登录,则跳过LoginActivity
并转到MainActivity
。
实例化FirebaseAuth
对象:
val firebaseAuth = FirebaseAuth.getInstance()
然后开始监听onStart()
方法中的更改,如下所示:
override fun onStart() {
super.onStart()
firebaseAuth!!.addAuthStateListener(this.authStateListener!!)
}
在MainActivity
中,您应该执行相同的操作:
val authStateListener = FirebaseAuth.AuthStateListener { firebaseAuth ->
val firebaseUser = firebaseAuth.currentUser
if (firebaseUser == null) {
val intent = Intent(this, LoginActivity::class.java)
startActivity(intent)
}
}
这基本上意味着,如果用户未登录,则跳过MainActivity
并转到LoginActivity
。在此活动中,您应该执行与LoginActivity
中相同的操作,应该开始侦听onStart()
中的更改。
在这两个活动中,不要忘记在不再需要时删除监听器。因此,请在您的onStop()
方法中添加以下代码行:
override fun onStop() {
super.onStop()
firebaseAuth!!.removeAuthStateListener(this.authStateListener!!)
}