Notification

  • Antworten:12
Sven
  • Forum-Beiträge: 8

27.10.2011, 23:45:07 via Website

Hallo Community,

ich wüsste gern wie ich eine im Hintergrund liegende app, die eine Notification abgesetzt hat, wieder in den Vordergrund bekomme bei click auf die Notification.

Kann mir hierzu jemand ein einfaches kurzes Beispiel geben? Danke!

Antworten
Sven
  • Forum-Beiträge: 8

28.10.2011, 11:06:52 via Website

1Intent notificationIntent = new Intent(this, MyClass.class);
2PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

Das Problem bei mir daran ist, das die My.class ausgeführt wird so das es eine zweite activity produziert wird. Die erste läuft ja noch und liegt irgendwo im Hintergrund und arbeitet. Ich möchte nur diese erste activity wieder in den Fordergrund holen, nicht starten. Geht sowa überhaupt?

Antworten
Markus B.
  • Forum-Beiträge: 636

28.10.2011, 11:59:23 via Website

Hallo,
wenn eine Activity in den "Hintergrund" geschoben wird arbeitet dort nichts mehr...
Zu diesem Thema gibt dann folgenden Link. Hier kannst du dir den Livecycle einer Activity anschauen.
Dann wirst du sehen das du die "alte" Activity nicht wieder laden kannst, solltest du dich nicht selber um die Geschichte kümmern z.b. über SharedPreferences oder onSaveInstanceState.

Gruß,
Markus

— geändert am 28.10.2011, 12:01:18

Antworten
Gelöschter Account
  • Forum-Beiträge: 294

28.10.2011, 16:56:41 via Website

@Markus: Das ist nicht ganz korrekt. Schau mal bitte hier nach dem "default" Handling von Activities wenn ein Intent gegen Sie abgefeuert wird. Schau mal den Unterschied zwischen "default" und "singleTop".

http://developer.android.com/guide/topics/manifest/activity-element.html

Es kann durchaus sein das der Intent vom NotificationBar eine zweite Instanz einer bereits laufenden Activity startet.

Antworten
Markus B.
  • Forum-Beiträge: 636

29.10.2011, 00:53:34 via Website

Hi Harald,
danke für den Hinweis und wieder was gelernt !
Jetzt stellt sich mir nur noch die Frage wie lang die Instance einer Activity von Android in diesem Fall vorgehalten wird.
Dazu muss ich morgen mal ein bissel lesen.

Gruß,
Markus

— geändert am 29.10.2011, 00:57:53

Antworten
Gelöschter Account
  • Forum-Beiträge: 294

29.10.2011, 08:39:39 via App

Solange sie aus Platzgründen nicht gekillt wird hängt sie rum ... sie geht erstmal nur über onPause().

Antworten
Sven
  • Forum-Beiträge: 8

30.10.2011, 11:56:56 via Website

@Harald-Wilhelm

genau hier liegt derzeitig mein Problem:

Beim click auf die Notification bekomme ich jedesmal eine neue activity. Wie kann ich das vermeiden?

Antworten
Sven
  • Forum-Beiträge: 8

30.10.2011, 13:13:55 via Website

1FLAG_ACTIVITY_SINGLE_TOP

hat den gewünschten Erfolg gebracht. Danke

Leider quält mich noch etwas anderes:

Ich starte in der activity einen Timer der vom Service alle n Sekunden die Daten holt. Wenn nun die app per "Rücktaste" in den Background geworfen wird läuft der Timer weiter und beim click auf die Notification startet dann ein zweiterl, dritter, usw., Timer. Wie kann ich das abfangen ob die activity Pause macht um den Timer zu stoppen oder hab ich hier einen grundlegenden Designfehler/Denkfehler gemacht?

— geändert am 30.10.2011, 13:15:42

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

30.10.2011, 14:05:04 via Website

activity lifecycle

onPause()
onDestroy()
onStop()

bekommst als callbacks

swordiApps Blog - Website

Antworten
Sven
  • Forum-Beiträge: 8

30.10.2011, 15:43:24 via Website

ist irgendwas gegen diese Variante einzuwenden?

1@Override
2 public boolean onKeyDown(int keyCode, KeyEvent event)
3 {
4 if ((keyCode == KeyEvent.KEYCODE_BACK))
5 {
6 Toast.makeText(this, "Beende!", Toast.LENGTH_LONG).show();
7 t.cancel(); //Timer stoppen
8 unbindService(myConnection); //Serviceconnection entbinden
9 }
10 return super.onKeyDown(keyCode, event);
11 }

Macht genau das was ich wollte und bringt laut Log auch keine Fehler.

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

30.10.2011, 19:50:59 via Website

Naja,
hast du mal dein Bildschirm gesperrt und wieder entsperrt? (Wo wird eigentlich dein Timer gestartet? OnResume?)
Da könnte es eventuell zu Problemen kommen..
Lg Ansgar

Antworten