# Activity-Wechsel bitte ohne Notification



## Gast2 (18. Dez 2012)

Hallo,

Ich habe eine Notification erstellt, mit der ich die App zurückholen kann, wenn diese in den Hintergrund tritt.
(Z.B. beim Betätigen des Home-Buttons)

Leider wird diese Notification auch beim Wechsel der Activitys innerhalb der App, also innerhalb des Packages erzeugt. So hab ich mir das nicht gedacht. Leider konnte ich bis dato nicht herausfinden, wie ich das vermeide. Ich suchte zB. vergeblich nach einer Abfrage, ob das Package noch im Vordergrund ist.

*Wie kann ich mitteilen, dass die Notfication nur beim Ausblenden der App erstellt wird und nicht beim Wechsel der Activity?*


```
@Override
	public void onPause(){
		super.onPause();		
		releaseNotification();
	}
	/**
	 * notification at the notification bar 
	 */
	private void releaseNotification(){
		NotificationCompat.Builder mBuilder =
		        new NotificationCompat.Builder(this)
		        .setSmallIcon(R.drawable.logo)
		        .setContentTitle("meine App")
		        .setContentText("hallo!")
		        .setAutoCancel(true);
		Intent resultIntent = new Intent(this, MainActivity.class);
		TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
		stackBuilder.addParentStack(MainActivity.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(0, mBuilder.build());
	}
```


----------



## eRaaaa (18. Dez 2012)

onPause wird aufgerufen wenn eine andere Activity in den Vordergrund kommt (dabei ist es egal welche, ob eine aus der eigenen Applikation oder nicht). 
Vlt. wäre ja onUserLeaveHint() etwas für dich?


----------



## Gast2 (18. Dez 2012)

Leider reagiert onUserLeaveHint() bezüglich meines Problems genau so wie onPause. 

Obwohl die Beschreibung in Activity | Android Developers gut auf mein Problem passt?!

???:L


----------



## Michael... (18. Dez 2012)

frankmehlhop hat gesagt.:


> Obwohl die Beschreibung in Activity | Android Developers gut auf mein Problem passt?!


? Ich lese da was anderes.
Hier steht, dass sich diese Methode ebenfalls auf die Activity bezieht und - im Falle, dass der Anwender aktiv die Activity "verlässt" - diese unmittelbar vor der onPause() aufgerufen wird. Die Methode hilft als nur zur Unterscheidung, ob das Pausieren durch den Anwender oder irgendeinen Systemprozess ausgelöst wird.
Folgendes hört sich so an, als könnte es weiter helfen:
Application’s Pause/Resume  Sriram Ramani


----------



## Gast2 (18. Dez 2012)

Danke für den Link.

Ich habe den Code getestet, aber sobald das Package nicht mehr oben drauf liegt, reagiert dieser Code nicht mehr und genau das ist das was ich bräuchte. Ich hätte die Notication aufgerufen, sobald die App (das Package) nicht mehr oben liegt (die sichtbare Oberfläche stellt).

Schade, vom Ansatz fand ich den Code gut (wenn auch aufwendig).
Und wer diesen Pfad evtl. mal folgen mag, hier meine Beobachtungen:
ArrayList<ApplicationLifecycleCallbacks> mListeners wird nie gefüllt,
addApplicationLifecycleCallbacks wird nie aufgerufen.
Ich vermute dass hier die Ursache liegen könnte, 
aber bei mir hört hier das Verständnis für diesen Code vorerst auf.

Also: *Ich suche weiter nach einer richtigen Möglichkeit!*


----------



## schlingel (19. Dez 2012)

Folgender Vorschlag. Möglicherweise ein bisserl Overkill, könnte aber funktionieren:

Du verwendest einen Service um die Notifications zu feuern. (LocalService)
Wird eine Activity angezeigt (onResume), schickst du dem Service eine Nachricht. ACTIVITY_ON oder sowas.
Wird eine Activity in den Hintergrund geschickt (onPause), schickst du dem Service eine Nachricht. ACTIVITY_OFF z.B.

Der Service zählt mit. ACTIVITY_ON ++, ACTIVITY_OFF --, erreichst du 0 wartest du ca. 500ms ob nicht noch eine Nachricht daherkommt. Kommt keine zeigst du die Notification an, kommt eine dann eben nicht.

Vorteil: Notifications-Code anzeigen ist zentral. 
Nachteil: Eine jede deiner Activities muss Nachrichten broadcasten.

PS: Der oben verlinkte Beitrag läuft darauf hinaus, dass du das so ähnlich machst wie mit dem Service nur dass du anstatt des Services eine statische Klasse verwendest. Zufällig ist die dann auch eine Application.


----------



## Michael... (19. Dez 2012)

Ein Service war auch mein erster Gedanke, dann bin ich bei der Internet Recherche auf diesen Artikel gestossen.
Ist zwar nicht genau das was Du vorhast, aber die Idee mit der eigenen Applicationen und den Activities basierend auf einer eigenen Basis Activitiy fand ich ganz gut. Dadurch bekommst Du ja in der Application mit wenn eine Activity pausiert und in den Hintergrund geschickt wird. In Kombination mit dem Vorschlag von schlingel kurz zu warten und dann zu prüfen, ob nicht doch noch eine Actitivity wieder fortgesetzt wurde, ist das scheinbar machbar - zumindest hat es bei einem quick & dirty Test meinerseits scheinbar wie gewünscht funktioniert.



> Schade, vom Ansatz fand ich den Code gut (wenn auch aufwendig).
> Und wer diesen Pfad evtl. mal folgen mag, hier meine Beobachtungen:
> ArrayList<ApplicationLifecycleCallbacks> mListeners wird nie gefüllt,
> addApplicationLifecycleCallbacks wird nie aufgerufen.
> ...


Diese Listener Geschichte ist nur dafür gedacht, falls "jemand" von aussen mitbekommen will, wenn Activities pausiert oder fortgesetzt werden. Ist für Deinen Zweck aber irrelevant und kann entfernt werden.


----------

