German App im Hintergrund

mcmanu

Active Member
Licensed User
Longtime User
Hallo,
Ich Programmiere an einem Musikplayer, Funktioniert soweit alles :)
Nun möchte ich das wenn man die app schließst die app im Hintergrund geöffnet lassen (ohne das die musik abbricht). Ich dachte mir mit einen Service, jedoch Bricht die musik dann ab und startet den titel im Service erneut.
Gibt es eine andere Möglichkeit die app in den Hintergrund zu setzten? (ähnlich wie beim Druck auf die Menütaste)
 

Jost aus Soest

Active Member
Licensed User
Longtime User
Ein Service ist schon der richtige Weg: Die Activity startet den Service, und dieser wiederum spielt immer die Musik.
Schau dir die Doku zu den Services an, um herauszufinden, wie man das Killen deines Services etwa mit StartForeground verhindert:
Service - Basic4android Wiki
 

mcmanu

Active Member
Licensed User
Longtime User
Danke

Okay alles Klar Danke ;)
Dann werd ichs mit dem Service machen :)
Vielen Dank
 

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
Hallo,

ich habe auch ein App der auch im Hintergrund laufen soll, allerdings ist es so, sobald ich den App im Taskmanager schließe, ist die Anwendung beendet, also es läuft nicht mehr im Hintergrund.

Kann mir einer da helfen wie ich das dauerhaft zum laufen bringen kann?

gruß
Sinan
 

corwin42

Expert
Licensed User
Longtime User
Da ist die Frage, was denn "im Hintergrund laufen" genau heisst.

Wenn man in einem Service alle paar Sekunden/Minuten etc. etwas machen will, sollte man keinen Timer benutzen, sondern lieber den Service immer wieder sich selber mit StartServiceAt() starten. Timer im Service funktionieren nicht zuverlässig. Bei kurzen Zeiten gehts meist, bei längeren Zeiten kann es sein, dass das System den Prozess killt.

Wenn sichergestellt sein soll, dass der Service im Hintergrund weiter läuft muss man mit Service.StartForeground() den Service als Foregroundprozess registrieren. Dann wird allerdings auch ein Notification Icon angezeigt.
 

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
hallo danke für deine hilfe

was genau meinst du mit StartServiceAT() bzw. wie wende ich das an?

gruß
sinan
 

corwin42

Expert
Licensed User
Longtime User
Die übliche Methode, einen Service etwas periodisch tun zu lassen ist, den Service seine Arbeit machen zu lassen und am Ende mit StartServiceAt() einen Zeitpunkt bestimmen, wann der Service erneut gestartet werden soll, um seine Arbeit erneut zu tun. Damit wird der Service halt periodisch aufgerufen und dabei ist es egal, ob der Prozess dazu mittlerweile gekillt wurde. Wenn der Zeitpunkt da ist, wird der Service einfach neu gestartet.
 

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
und wo genau schreibe ich das hin?

unter:

Service_Start, Service_Create
und was soll ich in das Klammer setzen?

StartServiceAt()
 

corwin42

Expert
Licensed User
Longtime User
Hier mal ein Link auf ein Beispiel. Dabei geht es zwar um ein Widget, aber das sollte egal sein.

Am Ende von Service_Start wird einfach StartServiceAt() mit einer Zeit von ca. 1 Minute aufgerufen. Für die genauen Parameter siehe die Onlinehilfe. Dann wird nach 1 Minute der Service erneut gestartet und dabei ist es halt egal, ob der Prozess für den Service mittlerweile gekillt wurde.

Bei jedem Start des Services wird das Widget mit der aktuellen Uhrzeit aktualisiert und dann legt der Service sich halt für 1 Minute wieder schlafen.
 
Top