2011-04-12 13 views
16

Necesito saber una forma genérica para distinguir entre una llamada de actividad del iniciador y una llamada de otra actividad desde mi aplicación, o un RETROCESO de la actividad pilaDiferenciar entre el inicio de una actividad desde la pantalla de inicio o desde otra actividad desde la aplicación

¿Alguien? esto me está molestando durante bastante tiempo y ahora tengo que poner a descansar ...

Gracias de antemano JQCorreia

+0

No estoy seguro, pero ¿ha tratado de buscar en 'getIntent()' y ver si se ve alguna diferencia ?! Supongo que deberías ver algunas diferencias en la acción ... – WarrenFaith

Respuesta

22

En el onCreate de su actividad, llame getIntent(). Si la actividad se inicia desde el iniciador (pantalla de inicio) los valores para getAction() serán android.intent.action.MAIN y el 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.

+0

¡Eres un ángel! ¡Oh, dulce dicha! Esto está molestando durante un vergonzoso (mi vergüenza al menos) mucho tiempo. – JQCorreia

+0

No está funcionando, sigue obteniendo la categoría android.intent.category.Launcher cuando se usa el navegador. – Warpzit

+0

Creo que este método no funciona para casos de respaldo/subida/finalización() ya que la actividad anterior se inició con la intención previa de que se inició. Esto solo puede aplicarse si la actividad de fondo se destruyó y necesita ser recreada. – TheIT

3

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

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

Si el iniciador no es el icono de la pantalla de inicio, entonces puede verificar si el intent.hasExtra("caller") es verdadero y, de ser así, de qué se trata.

0

en 2 casos el onRestart(); llamada, 1.cuando la actividad proviene del fondo, 2.cuando el usuario alcanza la actividad mediante el botón Atrás, entonces solución de muestra: use la función OnBackPressed() para establecer un indicador ... así sabrá que onRestart llamado por el botón Atrás pulse ... . en onRestart() comprobar la bandera y restablecerla y ....

0

Basado en advantej's answer, aquí es un ejemplo completo que también oculta el botón UP si la actividad fue lanzado desde un icono de lanzador:

@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); 
    } 

} 
0

Aquí está el método de conveniencia por lo que no necesita 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; 
} 
+0

Si tiene la función Take a Intent en lugar de llamar a getIntent, se convierte en un método portable util :) –

1

Puede encontrarlo desde el indicador 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 
Cuestiones relacionadas