the studio startactivity not must intent found exported error change activity android android-activity android-intent launcher

studio - Actividad de inicio dinámico en Android?



startactivity android studio (2)

¿Hay alguna manera de cambiar dinámicamente la actividad de inicio en Android en función de un condicionamiento? Lo que intenté hacer (eso no funcionó) fue lo siguiente:

  1. eliminar la categoría LAUNCHER como se define en mi AndroidManifest.xml
  2. crear una clase de aplicación personalizada que la aplicación utiliza
  3. anula el método onCreate de mi clase de aplicación para definir algún código como el siguiente:

.

if (condition) { startActivity(new Intent(this, MenuActivity.class)); } else { startActivity(new Intent(this, LoginActivity.class)); }


¿Por qué no tener una Activity inicial sin interfaz de usuario que verifica la condición en onCreate , luego inicia la siguiente Activity y luego llama a finish() en sí mismo? Nunca he llamado a finish() desde dentro onCreate() , así que no estoy seguro si esto funcionará.

EDITAR
Parece que funciona bien. Aquí hay un código para hacerlo más claro.
Activity inicial:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent; if (condition) { intent = new Intent(this, ClassA.class); } else { intent = new Intent(this, ClassB.class); } startActivity(intent); finish(); // note we never called setContentView() }

Otra Activity :

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }


Esto es lo que hice personalmente para uno de mis pequeños proyectos móviles. En lugar de crear una actividad separada sin pantalla donde está la condición y que inicia la pantalla correspondiente, puse la condición en una Activity e hice un conjunto dinámicoContentView setContentView() , como en:

if (!userIsLoggedIn) { setContentView(R.layout.signup); } else { setContentView(R.layout.homescreen); }

Dos notas importantes para este enfoque:

1: en lugar de escribir eso en onCreate() , desea poner la toma de decisiones dentro de onResume() precisamente porque siempre se llama a esta última siempre que la pantalla deba mostrarse en el frente. Puedes ver eso desde el ciclo de vida de la actividad de Android. Entonces, si, por ejemplo, el usuario acaba de descargar mi aplicación y la lanzó por primera vez, porque ningún usuario ha iniciado sesión, se le dirigirá a la página de registro. Cuando termine de registrarse y por algún motivo presiona el botón HOME (no BACK , que sale de la aplicación por completo) y luego reanuda la aplicación, el diseño que verá ya es la pantalla de inicio. Si pongo el condicional dentro onCreate() , lo que se habría mostrado es la pantalla de onCreate() porque, de acuerdo con el ciclo de vida, no vuelve a onCreate() cuando trae de vuelta una aplicación al frente.

2: Esta solución es ideal solo si fusionar las funcionalidades de esas dos actividades no produciría un bloque de código diabólico largo. Como dije, mi proyecto era pequeño (su característica principal ocurre en segundo plano), por lo que esa Activity dinámica única no tenía demasiado. La Activity sin pantalla definitivamente es el camino a seguir si necesita que su código sea más legible para el ser humano.