¿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.
- Simulación de la muerte de la actividad en Android
- Problema con la cámara cuando cambia la orientación
- ¿Cómo especificar qué actividad se inicia al iniciar la aplicación?
- Android: borrar historial al navegar entre Actividades
- Icono de Lanzador y actividad separado con Android
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");
- ¿Cómo manejar el cambio de orientación de pantalla cuando el diálogo de progreso y el hilo de fondo están activos?
- OnBackPressed - evite destruir la actividad
- ¿Cuándo se llama al método onCreate () de la aplicación?
- OverridePendingTransition en SDK de Android no funciona
- Android termina las actividades anteriores para la navegación
- Android - setStatusBarColor () NoSuchMethodError excepción
- Múltiples actividades, idénticas onCreateOptionsMenu, onOptionsItemSelected y onKeyDown. ¿Puedo reutilizar el código de alguna manera?
- ¿Cuál es la diferencia entre esto, getContext () y getActivity ()?
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