[英]Using Firebase open a different activity if user logged in second time
[英]Android: Start different activity if there is a user logged in
我正在構建一個 Android 應用程序,其中一個活動是登錄屏幕。 當應用程序打開時,如果用戶已經登錄,我想跳過 LoginActivity 並將用戶定向到另一個。 當用戶登錄我的應用(使用 Google Firebase)時,我將他們的用戶名和其他數據保存在他們設備的共享首選項中。 當他們注銷時,他們的共享首選項將被清除。
我目前擁有清單文件的方式是,啟動應用程序時唯一可以打開的活動是 LoginActivity:
<activity android:name=".LoginActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
在 LoginActivity 的 OnCreate() 方法中,如果共享首選項中保存了用戶名(意味着用戶已登錄),我會立即更改活動:
public class LoginActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences userData = getApplicationContext().
getSharedPreferences("userdata", 0);
String n = userData.getString("username", "");
if (!userData.getString("username", "").equals(""))
{
Intent myIntent = new Intent(LoginActivity.this, TabbedActivity.class);
startActivity(myIntent);
}
}
但是,這種方法存在問題。 很多時候,在啟動 TabbedActivity 之前,LoginActivity 仍會顯示一秒鍾。 我想解決這個問題,以便在用戶登錄時實際上根本看不到 LoginActivity。
我認為我采取的方法都是錯誤的,並且有一種更簡潔的方法可以立即打開正確的活動。 對此的任何幫助將不勝感激。
一種可能的方法:
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:statusBarColor">@color/background_splash</item>
<item name="android:windowBackground">@drawable/background_splash</item>
</style>
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<color android:color="@color/background_splash"/>
</item>
<item>
<bitmap
android:src="@drawable/ic_splash_logo"
android:gravity="center"/>
</item>
</layer-list>
SplashTheme
設置為您的應用程序/啟動器活動主題:<application
...
android:theme="@style/SplashTheme">
<!-- or -->
<activity
...
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
onCreate()
LoginActivity
中設置正常的應用主題和內容視圖,並在MainActivity
設置應用主題(或在清單中設置)public class LoginActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
val isUserLoggedIn = ...
if (!isUserLoggedIn)
{
setTheme(R.style.AppTheme)
setContentView(R.layout.activity_login)
}
else {
//Navigate to Main Activity
}
}
}
我不確定這是否是最好的方法,但是您可以創建一個 Loading 活動來啟動在任何情況下所需的活動。
public class LoadingActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences userData = getApplicationContext().
getSharedPreferences("userdata", 0);
String n = userData.getString("username", "");
if (!userData.getString("username", "").equals(""))
{
Intent myIntent = new Intent(LoginActivity.this, TabbedActivity.class);
startActivity(myIntent);
}else{
Intent myIntent = new Intent(OtherActivity.this, TabbedActivity.class);
startActivity(myIntent);
}
}
關於視圖,同時添加 gif 或徽標。
我有一個實現,但沒有共享首選項,而且我在任何時候都看不到登錄屏幕。
我的結構如下:我有一個初始啟動畫面,然后是一個主要活動,我在這里重寫 onStart 方法以檢查用戶是否有一個打開的部分,如果它被傳遞給主活動。
我希望它可以幫助你,如果你不告訴我,我會添加更多的代碼。
public override fun onStart() {
super.onStart()
// if user is loged goto Home Activity
if (firebaseUser != null) {
// Name, email address, and profile photo Url
val name = firebaseUser?.displayName
val email = firebaseUser?.email
val photoUrl = firebaseUser?.photoUrl
val uid = firebaseUser?.uid
val emailVerified = firebaseUser!!.isEmailVerified
goToActivity<HomeActivity>()
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.