una studio segundo que pasar otra llamar intent hacer como activity actividad android android-activity stack back launcher

studio - llamar otra actividad android



Diferenciar entre un lanzamiento de actividad desde la pantalla de inicio o desde otra actividad desde la aplicaciĆ³n (7)

Además de la respuesta de @ advantej, puede extender cada llamada de inicio a esa actividad agregando un extra al intento de inicio (por ejemplo, intent.putExtra("caller", this.getClass().getSimpleName() );

En el método onCreate la actividad puede verificar lo que sugiere @advantej.

Si el iniciador no es el ícono de la pantalla de inicio, puede verificar si el intent.hasExtra("caller") devuelve verdadero, y si es así, cuál es.

Necesito conocer una forma genérica de distinguir entre una llamada de actividad desde el iniciador y una llamada de otra actividad desde dentro de mi aplicación, o una RESPUESTA en la pila de actividades

¿Nadie? Esto me está molestando desde hace bastante tiempo y necesito ponerlo en reposo ...

Gracias de antemano JQCorreia


Basado en la respuesta de advantej , aquí hay un ejemplo completo que también oculta el botón ARRIBA si la actividad se inició desde un ícono de inicio:

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sell); /** * If this activity was started from launcher icon, then don''t show the Up button in the action bar. */ ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { Intent intent = getIntent(); Set<String> intentCategories = intent.getCategories(); boolean wasActivityStartedFromLauncherIcon = Intent.ACTION_MAIN.equals(intent.getAction()) && intentCategories != null && intentCategories.contains(Intent.CATEGORY_LAUNCHER); boolean showUpButton = !wasActivityStartedFromLauncherIcon; actionBar.setDisplayHomeAsUpEnabled(showUpButton); } }


El enfoque más simple en el que puedo pensar sería pasar una bandera al iniciar la actividad desde sus propias actividades. También debe verificar si la actividad se creó o se reanudó, esto se puede hacer configurando un booleano en el método onCreate, y luego verificando onResume.

A continuación se muestra el código que puede utilizar ( no probado ):

Actividad en la que desea verificar (diga MainActivity.class):

Boolean onCreateCalled = false; Boolean calledFromAppActivities = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); onCreateCalled = true; Bundle mainData = getIntent().getExtras(); if (mainData != null) { if (getIntent().hasExtra("call_from_own_activity")) { calledFromAppActivities = true; } } ..... } @Override protected void onResume() { super.onResume(); if (onCreateCalled && !calledFromAppActivities) { // The app was not called from any of our activities. // The activity was not resumed but was created. // Do Stuff } // To stop it from running again when activity is resumed. onCreateCalled = false; .... }

Cuando llame a MainActivity desde otras actividades, use el siguiente código:

private void call_main () { Intent i = new Intent(getApplicationContext(), MainActivity.class); i.putExtra("call_from_own_activity", true); startActivity(i); }


En el onCreate de su actividad, llame a getIntent() . Si la Actividad se inicia desde el iniciador (pantalla de inicio), los valores para getAction() serán android.intent.action.MAIN y getCategories() devolverá un conjunto que contendrá la categoría android.intent.category.LAUNCHER. Si la actividad se inicia desde otro lugar, estos valores pueden ser null .


Este es un método conveniente para que no tenga que escribirlo usted mismo:

protected boolean isStartedByLauncher() { if (getIntent() == null) { return false; } boolean isActionMain = Intent.ACTION_MAIN.equals(getIntent().getAction()); Set<String> categories = getIntent().getCategories(); boolean isCategoryLauncher = categories != null && categories.contains(Intent.CATEGORY_LAUNCHER); return isActionMain && isCategoryLauncher; }


Puedes averiguarlo desde la bandera de intención.

paso 1:

Intent intent = getIntent(); int flag = intent.getFlag();

paso 2:

if flag = Intent.FLAG_ACTIVITY_NEW_TASK launch from other app or activities else launch from home page


en 2 casos el onRestart (); llamado, 1. cuando la actividad proviene del fondo, 2. cuando el usuario llega a la actividad con el botón de retroceso y luego la solución de muestra: use la función onBackPressed () para establecer una bandera ... para que sepa que el reinicio se debe a que presiona el botón de retroceso ... en onRestart () verifica la bandera y la reinicia y ...