¿Por qué iniciar una actividad desde un widget causa que mi actividad principal comience también?
Cuando inicio una actividad desde un widget, quiero que el botón de retroceso vaya a la pantalla principal, pero en su lugar va a la actividad principal de la aplicación. Después de juguetear alrededor encontré que si de alguna manera cierra la actividad principal de la aplicación, este problema no ocurre. Extraño.
Encontré una solución aquí que decía llamar finish (); En la onPause de mi actividad principal (). Obviamente esta es la solución equivocada, por ejemplo, la reorientación de la pantalla provoca una onPause () para que la actividad de voluntad muera cada vez que el teléfono se gira.
- Animación de transición de actividad de Android
- Android: Dejar de recrear la actividad en el cambio de orientación
- Android: Modo de inicio 'instancia única'
- Cómo manejar la ActivityNotFoundException?
- Intención y actividad de comienzo de la cadena
Así es como empiezo mi actividad:
@Override public void onReceive(Context context, Intent intent) { [...] //new Emergency().emDialog(context).show(); Intent myIntent = new Intent(context, EmergencyActivity.class); // FLAG_ACTIVITY_NEW_TASK is needed because we're not in an activity // already, without it we crash. myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(myIntent);
Puedes ver el resto del código en http://code.google.com/p/emergencybutton/source/browse
Editar: He intentado funcionar la actividad diferentemente, pero todavía no trabaja correctamente:
Intent myIntent = new Intent(); myIntent.setClassName("com.emergency.button", "com.emergency.button.EmergencyActivity");
- Cuando isValidFragment () de android de PreferenceActivity se llama?
- Ejecutar código en el estado onPause () o onStop () de la actividad
- ¿Por qué aparece la vista vacía en el archivo de disposición en la pantalla aunque listview tiene elementos?
- OnActivityResult () llamado prematuramente
- Otra actividad aparece y cubre la mitad del tamaño de la pantalla
- Actividad de Android Refresh cuando vuelve a ella
- ¿Cómo establezco la actividad principal de una actividad en tiempo de ejecución?
- No hay animación al cambiar de fragmento a la actividad y volver
Aunque nunca he utilizado widgets, creo que al hacer clic en el widget está reanudando una tarea existente. Por lo tanto, cuando usted está en esa tarea, volverá a la última actividad en esa tarea (en lugar de Inicio).
Vea este enlace y elija el modo de lanzamiento adecuado para su widget http://developer.android.com/guide/topics/fundamentals.html#lmodes
Ok, así que no estoy exactamente seguro de lo que pasó aquí pero android:launchMode="singleInstance"
en la actividad en AndroidManifest.xml lo arregló de alguna manera.
<activity android:name=".EmergencyActivity" android:launchMode="singleInstance"
@Octavian – Debería haber aclarado que iniciar la actividad de un onReceive en un AppWidgetProvider. Estoy en la pantalla de inicio, iniciando una actividad titulada B, pero de alguna manera tanto A como B están en la pila de actividades en lugar de sólo B.
http://developer.android.com/guide/topics/manifest/activity-element.html#lmode
El comportamiento no es extraño, es sólo la forma en que funciona Android. La pila de actividades sólo realiza un seguimiento de todas las actividades. Ahora, cuando inicia una actividad A que inicia otra actividad B, entonces su pila parece (B, A). Si presiona la tecla de retroceso, la actividad B se va a extraer de la pila y A se va a llevar de nuevo al primer plano.
La solución correcta es simplemente llamar a finish()
justo después de disparar el Intent
.
A veces no es posible usar launchMode singleInstance en la aplicación por algunas razones. En este caso, debe iniciar su actividad y borrar la pila de actividades. Puede archivar esto usando banderas. Hay un ejemplo:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
- Widget de la aplicación: ¿puedes especificar un tamaño mínimo y un tamaño predeterminado?
- Cómo redireccionar mi aplicación al servicio de ubicación en la configuración