2016-07-23 32 views
1

Sagen wir, dass wir Aktivität haben, die lustiges Bild anzeigt und es FunnyActivity nennt. Diese Aktivität kann von MainActivity aus gestartet werden, wobei es sich um die Basisaktivität in der Anwendung handelt, nachdem Sie auf die Schaltfläche geklickt haben. Wir möchten auch einige Benachrichtigungen pushen und wenn der Benutzer auf die Benachrichtigung klickt, sollte FunnyActivity gestartet werden. Also haben wir diesen Teil des Codes hinzufügen:Anwendung von Benachrichtigung öffnen

Intent notificationIntent = new Intent(this, FunnyActivity.class); 
    notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

    PendingIntent intent = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), notificationIntent, 0); 

und diese PendingIntent verwendet in Benachrichtigung Builder

setContentIntent(intent) 

Natürlich FunnyActivity schön bringt, aber wir wollen MainActivity öffnen, wenn Benutzer-Taste auf FunnyActivity klickt zurück .

Wie können wir das erreichen? Bitte denken Sie daran, dass, wenn der Benutzer zu MainActivity zurückkehrt, er FunnyActivity erneut über die Schaltfläche öffnen kann.

+0

Ich kenne nicht die Standardlösung und das könnte wie ein Hack klingen, aber eines der Dinge, die Sie tun können, überschreiben 'onBackPressed()' in FunnyActivity und starten MainActivity mit richtigen Flags dort. – Shaishav

Antwort

4

Try this:

// Intent for the activity to open when user selects the notification 
Intent detailsIntent = new Intent(this, DetailsActivity.class); 

// Use TaskStackBuilder to build the back stack and get the PendingIntent 
PendingIntent pendingIntent = 
     TaskStackBuilder.create(this) 
         // add all of DetailsActivity's parents to the stack, 
         // followed by DetailsActivity itself 
         .addNextIntentWithParentStack(upIntent) 
         .addNextIntent(detailsIntent); 
         .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 

NotificationCompat.Builder builder = new NotificationCompat.Builder(this); 
builder.setContentIntent(pendingIntent); 

Quelle: Create back stack when starting the activity

+0

Scheint richtig anwser! Aber wo ist die Verwendung von Details Intent? – ThirdMartian

+0

@ThirdMartian nach .addNextIntentWithParentStack (upIntent) – shantanu

+0

@ThirdMartian Ich habe die Antwort aktualisiert, auch 'upIntent' ist die Absicht für die MainActivity, die Sie auf gedrückten drücken möchten. – shantanu

0

Sie können dies versuchen:

TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 
Intent resultIntent = new Intent(this, FunnyActivity.class); 

        // Adds the back stack 
        stackBuilder.addParentStack(MainActivity.class); 
        // Adds the Intent to the top of the stack 
        stackBuilder.addNextIntent(resultIntent); 

Intent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 

        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)/*.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher))*/ 
          .setSmallIcon(R.mipmap.ic_launcher) 
          .setContentTitle(title) 
          .setContentText(msg) 
          .setContentIntent(resultPendingIntent) 
          .setAutoCancel(true); 

Dies ist, wie Sie Lösung für Ihr Problem erreichen können. Hoffe, das hilft dir