17

da Sviluppo Android, ho implementato una semplice notifica dal codice di esempio, ma nella mia app, non voglio nuove intenzioni e creare di nuovo l'attività, io solo voglio tornare alla mia ultima attività (è un'interfaccia utente di mediaplayer). se io uso il codice di esempio, si creerà una nuova attività daCome dovrei fare dalla notifica di nuovo all'attività senza nuovo intento

Intent resultIntent = new Intent(this, ResultActivity.class); 

io commento relativo codice sui nuovi intenti e ricevuto l'avviso, ma non hanno idea di come tornare alla mia ultima attività ...

tornare alla mia app da premere a lungo il tasto home e toccare la mia app è OK. quello che voglio è proprio come questo comportamento.

bleow è il codice di esempio dello sviluppo Android, commento la nuova porzione di intento.

NotificationCompat.Builder mBuilder = 
    new NotificationCompat.Builder(this) 
    .setSmallIcon(R.drawable.notification_icon) 
    .setContentTitle("My notification") 
    .setContentText("Hello World!"); 
/*Intent resultIntent = new Intent(this, ResultActivity.class); 
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 
stackBuilder.addParentStack(ResultActivity.class); 
stackBuilder.addNextIntent(resultIntent); 
PendingIntent resultPendingIntent = 
    stackBuilder.getPendingIntent(
     0, 
     PendingIntent.FLAG_UPDATE_CURRENT 
    ); 
mBuilder.setContentIntent(resultPendingIntent);*/ 
NotificationManager mNotificationManager = 
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
mNotificationManager.notify(mId, mBuilder.build()); 

[UPDATE]

ho pensato ho bisogno di impostare il flag per intento e properity per l'attività. quindi, per l'attività che voglio tornare al ho impostato

android:launchMode="singleInstance" 

e perché, io non voglio una nuova attività da intenti, voglio solo la mia ultima attività, in modo aggiungo

Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY 

dalla documentazione che ho ottenuto utilizzando Pendingintent.contentIntent deve includere il flag FLAG_ACTIVITY_NEW_TASK e Quando si utilizza questo flag, se un'attività è già in esecuzione per l'attività che si sta avviando, quindi una nuova attività non verrà avviata; invece, l'attività corrente sarà semplicemente essere portato verso la parte anteriore dello schermo con lo stato in cui era ultima in. così aggiungo anche

Intent.FLAG_ACTIVITY_NEW_TASK 

ma da logcat, ho ancora visto che quando tocco la notifica per tornare a attività, l'indicazione pendenti ha ancora chiamato onCreate() piuttosto che mostrare solo l'ultima attività che è ancora "viva".

+0

ho ottenuto una soluzione da http://stackoverflow.com/questions/2424488/android-new-intent-styles-new-instance-with-androidlaunchmode-singletop ma senza fortuna :( –

risposta

34

Se si desidera chiamare l'Attività da sfondo provare questo:

Intent intent = new Intent(this, YourLauncherActivity.class); 
    intent.setAction(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_LAUNCHER); 

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, 
      intent, 0); 
    mBuilder.setContentIntent(pendingIntent); 

Se si fa clic sul Notifica mentre sulla Homescreen l'ultimo mostrato attività della vostra App sarà arrivare al primo piano senza avviarlo nuova. Se l'attività è stata uccisa dal sistema, otterrai una nuova attività.

+2

ha funzionato! Grazie per il tuo ottimo aiuto! –

+0

Ma l'attività supportata in questo modo si separerà dalla mia applicazione originale :( ie attività (A) -> attività (B) allo stesso tempo PendingIntent per B. Quando ritorno a B dalla notifica, non posso ritorna ad A più ... –

+0

È strano, stai ancora usando 'android: launchMode =" singleInstance "'? –

0

In modalità SingleTop, io uso questo metodo senza definire esplicitamente la classe di attività delle radici:

Intent intent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER) 
.setComponent(getPackageManager().getLaunchIntentForPackage(getPackageName()).getComponent()); 

e questo per riprendere ultima attività dalla notifica:

builder.setContentIntent(PendingIntent.getActivity(context, 0, intent, 0)); 

o questo per riprendere ultima attività da un servizio:

try { 
    PendingIntent.getActivity(this, 0, intent, 0).send(); 
} catch (CanceledException e) { 
    e.printStackTrace(); 
} 
0

Ho usato PendingIntent.getAct ivities invece di getActivity. Funziona bene nel mio progetto.

Intent backIntent = new Intent(this, HomeActivity.class); 
       backIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
Intent notificationIntent = new Intent(this, NextActivity.class); 

       final PendingIntent pendingIntent = PendingIntent.getActivities(this, 1, 
         new Intent[] {backIntent, notificationIntent}, PendingIntent.FLAG_ONE_SHOT); 
0

Per me, questo ha funzionato:

.setContentIntent(
    PendingIntent.getActivity(
    context, 
    0, 
    new Intent(context, YOUR_MAIN.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP),PendingIntent.FLAG_ONE_SHOT)) 

FLAG_ONE_SHOT: NON CREATE DUE VOLTE (associata a Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP)