2012-12-18 14 views
6

Der Dienst erstellt eine persistente Notification und startet die Hauptaktivität beim Klick über PendingIntent. Hier ist der Code.Benachrichtigung verhindern PendingIntent startet Aktivität wurde bereits gestartet?

Intent notificationIntent = new Intent(getApplicationContext(), ViewPagerActivity.class); 
PendingIntent pendingIntent = PendingIntent.getActivity(StreamingService.this, 0, notificationIntent, 0); 

Wenn jedoch die Haupttätigkeit gestartet wird wenn ich Benachrichtigung drücken, wird es wieder, und immer ...

Am Ende gestartet werden, habe ich die gleiche Tätigkeit pilled oben, eins auf dem anderen. Ich kann dies sehen, indem ich den Zurück-Knopf drücke, der die Hauptaktivität einmal abbricht und mich dann zu der gleichen Aktivität zurückbringt, bis ich den Letzten schließe.

Wie kann ich verhindern, dass dies geschieht? Kann PendingIntent erkennen, dass die Zielaktivität ausgeführt wird, damit die Aktivität nicht erneut erstellt wird, sondern die laufende Aktivität gestartet wird?

PS. Ich entschuldige mich, wenn ich das nicht gut erklären kann. Wenn dies der Fall ist, lass es mich wissen und ich werde das Problem umformulieren.

+0

Werfen Sie einen Blick auf [diesen Beitrag] (http://stackoverflow.com/a/5631993/593709) –

+1

Diese Frage wirklich nichts mit Benachrichtigungen zu tun hat; Sie sind lediglich der Mechanismus zum Starten Ihrer Aktivität, aber Ihr Problem tritt bei jedem anderen Mechanismus auf. @ etiennes Antwort enthält, was Sie tun müssen, um es zu beheben; Eine weitere Möglichkeit besteht darin, das Attribut android: launchMode in Ihrem Manifest zu verwenden, um den Startmodus für diese Aktivität ordnungsgemäß festzulegen. – mah

+0

@mah hast du recht. Ich werde das beheben. – sandalone

Antwort

6

Ich fand auch, diese Lösung. Dieses Attribut Manifest

  <activity android:name=".MyActivity" 
       android:label="@string/app_name" 
       android:launchMode="singleTop"  // <-- THIS LINE 
      > 

für jede Activity Sie diese Funktion benötigen. Bis jetzt funktioniert es überhaupt nicht fehlerfrei.

Welche Lösung ist besser? Meins ist einfacher, wenn nichts.

+1

Hört sich auch gut an. Die vorherige Lösung (Intent-Flags) wäre nützlich, wenn Sie verschiedene Optionen für verschiedene Fälle verwenden möchten. dh. Abhängig von der Benutzeraktion möchten Sie die Aktivität möglicherweise auf andere Weise starten. Es hängt hauptsächlich von Ihrem Anwendungsnavigationsschema ab, denke ich. – etienne

+0

+1 nützlich für mich. Um diese Antwort besser zu machen, schaut euch das http://developer.android.com/guide/topics/manifest/activity-element.html an, um zu erklären, wer es ist, single top und erfasse diese Absicht mit der Methode onNewIntent der Aktivität. – BlaShadow

0

Versuchen Sie, einen anderen Wert in REQUEST_CODE zu verwenden. Verwenden Sie nicht den Standardwert 0 in REQUEST_CODE.

oder Ihr pendingIntent startet Ihre Aktivität neu.

Wenn Sie den normalen Aktivitätszyklus verwenden möchten, geben Sie den Anforderungswert beim Erstellen von PendingIntent ein.

PendingIntent resultPendingIntent = PendingIntent.getActivity(
     context, REQUEST_CODE, 
     resultIntent, 
     PendingIntent.FLAG_UPDATE_CURRENT); 
+0

"Verwenden Sie nicht den Standardwert 0 in REQUEST_CODE.oder Ihr PendingIntent wird Ihre Aktivität neu starten." Bitte teilen Sie die Quelle mit – pvllnspk

Verwandte Themen