Verhindern Sie eine neue Aktivitätsinstanz nach dem Anklicken der Benachrichtigung

Anwendung (nicht erwünschtes) Verhalten –

  1. Anwendung wird gestartet, ein Text wird in Textfeld eingefügt und Benachrichtigung wird durch Schaltflächenaktion erstellt.
  2. Benutzer "Klicks" die Home-Taste, Anwendung ist "minimiert", Benachrichtigung ist in bar verfügbar
  3. Benutzer wählt die Benachrichtigung aus und die Anwendung ist "maximiert"

ABER – anstelle der ursprünglichen Instanz wird eine neue Instanz gestartet (zB in der neuesten Instanz fehlt der Originaltext, wenn die letzte Instanz geschlossen ist, gibt es noch die Originalinstanz mit Originaltext).

  • Wie gruppiert man Elemente aus der Datenbank und zeigt sie an - Android
  • ORMLite setzt alle Tabellen zurück
  • Senden einer Zeichenfolge über Bluetooth von einem PC als Client zu einem Mobiltelefon als Server
  • "Subversion-Befehlszeile Client-Version ist zu alt" Fehler in Android Studio
  • Android - activity_main kann nicht aufgelöst werden oder ist kein Feld
  • Ist es möglich, AbsListView zu erweitern, um neue ListView-Implementierungen zu machen?
  • Der Code der Benachrichtigungsmethode

    Context context = getApplicationContext(); CharSequence contentTitle = "someText1"; CharSequence contentText = "someText2"; Intent notifyIntent = new Intent(Intent.ACTION_MAIN); notifyIntent.setClass(getApplicationContext(), RadioStream.class); PendingIntent intent = PendingIntent.getActivity(RadioStream.this, 0, notifyIntent, 0); notifyDetails.setLatestEventInfo(context, contentTitle, contentText, intent); mNotificationManager.notify(SIMPLE_NOTFICATION_ID, notifyDetails); 

    Ich habe auch in der manifesten XML-Datei folgendes Tag

     android:launchMode="singleTask" 

    Aber es ist immer noch das gleiche … Das Hauptproblem ist die doppelte / dreifache Initialisierung der Anwendung, ich weiß, dass es andere Mittel gibt, um die Werte in wiederaufgenommenen Anwendungen zu bewahren. Auch ist es notwendig, dass die Anwendungen im Hintergrund laufen bleiben, da die Hauptfunktionalität das Streaming von Internetradio ist.

    Was fehlt im Code? Welche Art von Informationen von meiner Seite fehlt, um das Problem zu beheben?

    Vielen Dank!

    Dav

  • Android ContextCompat.checkSelfPermission () nicht gefunden
  • Wie sicher sind Client-SSL-Zertifikate in einer mobilen App?
  • Wie registriere ich APK auf Android Studio sogar mit nicht übersetzten Strings?
  • Android: getString (R.string) in statischer Methode
  • Wie implementieren Sticky Footer in recyclerview
  • CursorLoader-Nutzung ohne ContentProvider
  • 8 Solutions collect form web for “Verhindern Sie eine neue Aktivitätsinstanz nach dem Anklicken der Benachrichtigung”

    Was Sie als "Anwendung" bezeichnen, ist höchstwahrscheinlich eine Aktivität. Um zu vermeiden, re-crating es, wenn es nach vorne bringt, verwenden Sie

     android:launchMode="singleTop" 

    Um einige Code laufen Hintergrund, müssen Sie es als Service zu realisieren

    Eine weitere Möglichkeit besteht darin, setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP) auf deiner Intent .

    Fügen Sie diese Flagge zu Ihren Aktivitätseigenschaften hinzu.

    Android: launchMode = "singleInstance"

    Sie können PendingIntent.FLAG_CANCEL_CURRENT auf dem PendingIntent setzen:

     PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

    Wenn die Aktivität bereits existiert, wird das neue abbrechen und das alte nicht aktualisieren! Das funktioniert für mich!

    Reimplementiert als service – alles funktioniert wie erwartet

    Ich habe GCM Beispiel als Basis-Code für ein persönliches Projekt und ich konfrontiert das gleiche Problem oben beschrieben. GCM Beispiel: https://github.com/googlesamples/google-services/tree/master/android/gcm/app/src/main/java/gcm/play

    Ich fand eine Lösung durch die Kombination zu Antworten:

    1) Von @ognian Antwort, indem Sie App Manifest auf Antrag Abschnitt:

    Android: launchMode = "singleTop"

     <application android:allowBackup="true" android:icon="@mipmap/logo" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" **android:launchMode="singleInstance">** 

    2) Von @CommonsWare durch Setzen von setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP)

     private void sendNotification(String message) { Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, PendingIntent.FLAG_ONE_SHOT); 

    Es funktioniert für mich, indem Sie unten Kombination verwenden.

    1) den Startmodus in Manifestdatei android hinzufügen: launchMode = "singleInstance"

    2) set setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP) beim Erstellen von Absicht.

    Intent = new Intent (this, StartUpActivity.class); Intent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

    Anstatt von :

     notifyIntent.setClass(getApplicationContext(), RadioStream.class); PendingIntent intent = PendingIntent.getActivity(RadioStream.this, 0, notifyIntent, 0); 

    Verwenden Sie einfach diese Zeilen, es wird Ihnen helfen,

     notifyIntent = new Intent(); PendingIntent intent= PendingIntent.getActivity(RadioStream.this, 0, notifyIntent, 0); 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.