2010-06-02 24 views
6

Tengo una aplicación con pestañas y una entrada de la barra de notificación, cuando lo envío a fondo (presione en el botón de inicio) y tratar de volver a abrir la aplicación a través de clic en el barra de notificaciones, la aplicación se reinicia (la última pestaña seleccionada es se pierde).volver a abrir a través del elemento de notificación

Cuando coja el botón de inicio si la aplicación está en el fondo y seleccionar desde allí o haga clic en el icono de aplicación en la pantalla de inicio, el estado previo es restaurado por defecto (la ficha correcta es seleccionado)

IMO el intento de la notificación es incorrecto, pero estoy no estoy seguro de cómo solucionarlo.

En resumen: ¿Cómo obtener una aplicación en segundo plano de nuevo a en primer plano cuando hago clic en la entrada de notificación?

thx!

+0

Tenga en cuenta que disparar un 'Intent' de una notificación siempre crea una nueva instancia de' Activity'; no puede regresar directamente a una instancia existente. Por la parte superior de mi cabeza, creo que puedes usar uno de los indicadores como CLEAR_TOP (y 'onNewIntent' en tu' Activity') para asegurarte de que se mantenga la instancia existente. –

Respuesta

0

¿Está implementando los métodos onSaveInstanceState como se recomienda en el lifecycle documentation?

Su posible que cuando hace una pausa una aplicación y volver a ella de inmediato, que la aplicación aún está colgando hacia fuera en la memoria en el fondo. Sin embargo, no puede depender de esto, por lo que debe guardar el estado como la pestaña actualmente abierta cada vez que vaya al fondo, y restaurarlo cuando se reactive.

8

Coloque estas dos líneas. Esto se reanudará la actividad actualmente en pausa:

notificationIntent.setAction(Intent.ACTION_MAIN); 
notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
+2

Funciona muy bien. Pero mejor use las constantes notifyIntent.setAction (Intent.ACTION_MAIN); notifyIntent.addCategory (Intent.CATEGORY_LAUNCHER); – garmax1

4
Intent intent = new Intent(Application.getContext(), ActivityHome.class); 
intent.setAction("android.intent.action.MAIN"); 
intent.addCategory("android.intent.category.LAUNCHER"); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
Application.getContext().startActivity(intent); 
1
public static boolean isApplicationRunningBackground(final Context context) { 
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    List<RunningTaskInfo> tasks = am.getRunningTasks(am.getRunningAppProcesses().size()); 
    for (RunningTaskInfo runningTaskInfo : tasks) { 
     if (runningTaskInfo.topActivity.getPackageName().equals(context.getPackageName())) { 
      MyLog.i("UTIL", "packageName:" + runningTaskInfo.topActivity.getPackageName()); 
      MyLog.i("UTIL", "className" + runningTaskInfo.topActivity.getClassName()); 
      return true; 
     } 
    } 
    return false; 
} 

Intent notificationIntent; 
     if (Util.isApplicationRunningBackground(context)) { 
      notificationIntent = new Intent(context, MainView.class); 
     } else { 
      notificationIntent = new Intent(context, Splash.class); 
     } 
0

uso dos banderas en la intención

intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
2

He enfrentado el mismo problema y buscó vehementemente una respuesta, pero aquí s el truco: En lugar de intentar reiniciar la aplicación con el estado guardado utilizando su intención de notificación, abra una actividad en blanco usando el intento de notificación y en el método onCreate() de la actividad, simplemente termínelo(). Esto lo llevará de vuelta a la última actividad vista en la aplicación.

Cuestiones relacionadas