android - the - Omita correctamente la actividad de inicio de sesión si ya ha iniciado sesión
key hashes android studio (4)
En la actividad principal solo verifica si el usuario no es nulo y luego arranca
firebaseAuth = FirebaseAuth.getInstance();
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
finish();
startActivity(new Intent(MainActivity.this, UserHomeActivity.class));
}
El icono de mi lanzador inicia la actividad de inicio de sesión He almacenado el estado de inicio de sesión en SharedPreferences. ¿Hay alguna manera de omitir correctamente la actividad de inicio de sesión e ir directamente a la actividad principal sin ningún problema de interfaz de usuario. Todas las soluciones existentes que incluyen finish()
en onCreate()
hacen que el título de la actividad de inicio de sesión sea visible brevemente o algún otro fallo breve de la interfaz de usuario en la pantalla en blanco.
Puede crear una actividad base que verificará si el nombre de usuario y la contraseña del usuario ya están en las SharedPreferences
e inicia la actividad si no existe.
ejemplo:
public class BeanStalkBaseActivity extends SherlockActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(SavedPreference.getUserName(this).length() == 0)
{
Intent intent = new Intent(this,LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();
startActivity(intent);
}else
{
Intent intent = new Intent(this,MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();
startActivity(intent);
}
}
}
BeanStalkBaseActivity debe ser tu lanzador, ya que solo sirve como comprobador.
También puede verificar el estado de inicio de sesión durante la actividad de la pantalla de inicio si tiene uno. Las pantallas de bienvenida son excelentes para que los usuarios sepan que la aplicación no se ha bloqueado cuando se está cargando y también se puede usar para redirigir la aplicación a la pantalla apropiada.
Seguí esta gran guía la primera vez que hice una: https://www.bignerdranch.com/blog/splash-screens-the-right-way/
Tenga una actividad de inicio sin interfaz de usuario que decida abrir MainActivity o LoginActivity. No puede declarar ninguna UI con:
android:theme="@android:style/Theme.NoDisplay"
Otras dos posibles soluciones:
Hágalo al revés: convierta su mainActivity en su iniciador y verifique si el usuario ha iniciado sesión. Luego, redirija a loginActivity cuando este no sea el caso.
Otra forma es trabajar con fragmentos. Tenga una actividad base que pueda cargar tanto mainFragment como loginFragment. Para referencia: https://developer.android.com/training/basics/fragments/index.html