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.
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.
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
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%Tags und Links android android-notifications android-service