Entfernt das Aktualisieren einer Benachrichtigung den Vordergrundstatus eines Dienstes?

8

In meiner App stelle ich meinen Dienst in den Vordergrund, um zu verhindern, dass er durch Verwendung von:

beendet wird %Vor%

Dies zeigt auch die Benachrichtigung an den Benutzer (was sehr gut ist). Das Problem ist, dass ich später die Benachrichtigung aktualisieren muss. Also benutze ich den Code:

%Vor%

Die Frage ist dann: Wird dadurch der Dienst aus seinem speziellen Vordergrundstatus herausfallen?

In diese Antwort , CommonsWare zeigt an, dass dieses Verhalten möglich ist, aber er ist sich nicht sicher. Kennt also jemand die tatsächliche Antwort?

Hinweis: Mir ist bewusst, dass ein einfacher Weg, um aus dieser Frage herauszukommen, darin besteht, immer wieder startForeground() aufzurufen, wenn ich die Benachrichtigung aktualisieren möchte. Ich bin gespannt, ob diese Alternative auch funktioniert.

    
yydl 27.11.2011, 23:24
quelle

3 Antworten

9

Die App RandomMusicPlayer auf der Android-Entwicklersite verwendet NotificationManager, um die Benachrichtigung eines Vordergrunds zu aktualisieren Service, also sind die Chancen ziemlich gut, dass es den Vordergrundstatus behält.

(Siehe setUpAsForeground () und updateNotification () in der MusicService.java-Klasse.)

Nach dem, was ich verstehe, wenn Sie die Benachrichtigung abbrechen, wird der Dienst aufhören, ein Vordergrunddienst zu sein, also denken Sie daran; Wenn Sie die Benachrichtigung abbrechen, müssen Sie startForeground () erneut aufrufen, um den Vordergrundstatus des Dienstes wiederherzustellen.

    
Lorne Laliberte 07.12.2011, 22:52
quelle
8

Um zu verdeutlichen, was hier gesagt wurde:

  

Von dem, was ich verstehe, wenn Sie die Benachrichtigung den Dienst kündigen   wird aufhören, ein Vordergrunddienst zu sein, also behalte das im Hinterkopf; wenn du   Wenn Sie die Benachrichtigung abbrechen, müssen Sie startForeground () erneut aufrufen   um den Vordergrundstatus des Dienstes wiederherzustellen.

Dieser Teil der Antwort legt nahe, dass es möglich ist, ein fortlaufendes Notification -set durch Service zu entfernen, indem NotificationManager.cancel() für das beständige Notification verwendet wird. Das ist nicht wahr. Es ist nicht möglich, eine laufende Benachrichtigung, die durch startForeground() festgelegt wurde, durch Verwendung von NotificationManager.cancel() zu entfernen.

Die einzige Möglichkeit, es zu entfernen, ist stopForeground(true) aufzurufen, so dass die laufende Benachrichtigung entfernt wird, wodurch natürlich auch Service nicht mehr im Vordergrund steht. Es ist also genau umgekehrt. Das Service hört nicht auf, im Vordergrund zu sein, weil das Notification abgebrochen wird, das Notification kann nur abgebrochen werden, indem das Service im Vordergrund angehalten wird.

Natürlich könnte man sofort startForeground() aufrufen, um den Zustand mit einem neuen Notification wiederherzustellen. Ein Grund, warum Sie dies tun möchten, wenn ein Ticker-Text erneut angezeigt werden soll, da er nur ausgeführt wird, wenn das Notification zum ersten Mal angezeigt wird.

Dieses Verhalten ist nicht dokumentiert, und ich habe 4 Stunden damit verbracht, herauszufinden, warum ich Notification nicht entfernen konnte. Mehr zum Thema hier: NotificationManager.cancel () funktioniert nicht für mich

    
slinden77 09.07.2012 07:33
quelle
2

Wenn Sie eine von startForeground () festgelegte Benachrichtigung aktualisieren möchten, erstellen Sie einfach eine neue Benachrichtigung und benachrichtigen Sie sie anschließend mit NotificationManager.

Der wichtigste Punkt ist, dieselbe Benachrichtigungs-ID zu verwenden.

Durch das Aktualisieren der Benachrichtigung wird der Dienst NICHT aus dem Vordergrundstatus entfernt (dies kann nur durch Aufruf von stopForground erfolgen);

Beispiel:

%Vor%     
Luca Manzo 22.11.2013 10:23
quelle