2016-05-09 5 views
0

Wenn die App eine Nachricht von GCM empfängt, wird eine Benachrichtigung angezeigt.Aktivität kann nach Klicken auf Benachrichtigung nicht neu gestartet werden

 Intent intent = new Intent(this, MainActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, 
      PendingIntent.FLAG_UPDATE_CURRENT); 

    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
      .setSmallIcon(R.drawable.ic_event_white_24dp) 
      .setContentTitle("TheBriefPost") 
      .setContentText(message) 
      .setAutoCancel(true) 
      .setSound(defaultSoundUri) 
      .setContentIntent(pendingIntent); 

    NotificationManager notificationManager = 
      (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

    notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 

Wenn ich auf Benachrichtigung klicken, öffnet App-Aktivität, aber nicht neu zu starten. Was ist das Problem? Wie man es löst?

Antwort

0

App öffnet Aktivität aber nicht

Neustart Es ist nicht neu gestartet werden soll. FLAG_ACTIVITY_SINGLE_TOP wird „Wenn gesetzt, wird die Aktivität nicht gestartet werden, wenn er bereits an der Spitze der Geschichte Stapel läuft.

Warum Sie es neu gestartet werden sollen? Umgang mit Absicht Daten? Wenn ja, implementieren Sie onNewIntent() in Ihrer Aktivität.

+0

Ich sende GCM-Nachricht an das Gerät, um "neue Ereignisse verfügbar" zu informieren. Wenn der Benutzer klickt, sollte die Aktivität neu gestartet werden, sodass Daten von Grund auf neu geladen werden. Deshalb muss ich die Aktivität neu starten. Gibt es das überhaupt, um das zu tun? –

1

Die Antwort soll eine Fahne PendingIntent.FLAG_UPDATE_CURRENT

Flag geschickt zu den Flaggen des Intent/Pending Intent

Nach PendingIntent in Official Docs In der Pending Intent in Beziehung gesetzt wird darauf hinweisen, dass, wenn die beschriebene PendingIntent existiert bereits, dann behalte es aber ersetze seine extra Daten mit was ist in diesem neuen Intent.

ich in Ihrem Fall erraten müssen Sie PendingIntent.FLAG_CANCEL_CURRENT

Flag anzeigt, dass verwenden, wenn die beschriebene PendingIntent bereits vorhanden ist, sollte die aktuelle vor der Erzeugung eines neuen abgebrochen werden.

Accodring zu Activity in Official Docs In der Aktivität setzen Sie das Kennzeichen Intent.FLAG_ACTIVITY_SINGLE_TOP

Wenn gesetzt, wird die Aktivität nicht gestartet werden, wenn er bereits an der Spitze der Geschichte Stapel läuft.

Ich denke, hier gibt es Intent.FLAG_ACTIVITY_CLEAR_TASK

Wenn in einer Absichts Context.startActivity weitergegeben gesetzt verwenden müssen(), dieses Flag bewirkt, dass jede vorhandene Aufgabe, die mit der Aktivität in Verbindung gebracht werden würde gelöscht werden, bevor die Aktivität gestartet wird.

Verwandte Themen