Ich baue einen Musik-Player, der einen Dienst für die Wiedergabe verwendet. Ich habe eine Aktivitäts-Benutzeroberfläche, die den Dienst steuert (Wiedergabe, Pause, Nächste, ...). Ich möchte die Benutzeroberfläche von meinem Dienst aktualisieren, wenn die nächste oder vorherige Schaltfläche gedrückt wird. Ich dachte daran, einen ganzzahligen Wert zu übergeben. Hier ist mein Code:Senden von Daten vom Dienst an Aktivität Android
Ich habe einen Messenger für die Kommunikation verwendet. Der Code in meinem Dienst wie folgt aussieht:
enum Event {
NextSongChanged, CurrentPlayingSong
};
public synchronized void registerHandler(Messenger m) {
clients.add(m);
}
private void emit(Event e) {
for (Messenger m : clients) {
try {
m.send(Message.obtain(null, e.ordinal()));
} catch (RemoteException exception) {
/* The client must've died */
clients.remove(m);
}
}
}
Meine Methode, die ich auf Klick auf Next-Button nenne:
public synchronized void playnext() {
reset();
if(songIndex < (songsList.size() - 1)) {
songIndex += 1;
playSong(songIndex);
} else {
songIndex = 0;
playSong(songIndex);
}
emit(Event.NextSongChanged);
}
Sobald ich das NextSongChanged Ereignis ausgelöst ich die „songIndex“ übergeben wollen Variable in meine Tätigkeit. Irgendeine Idee, wie man das erreicht?
Mein Aktivitätscode das Ereignis zu behandeln:
private Messenger playerMessenger = new Messenger(new Handler() {
@Override
public void handleMessage(Message msg) {
switch (MyService.Event.values()[msg.what]) {
case NextSongChanged:
//String songTitle = songsList.get(currentSongIndex+1).get("songTitle");
//currentSongIndex += 1;
//songTitleLabel.setText(songTitle);
//updatePlaying();
break;
case CurrentPlayingSong:
break;
}
}
});
http://stackoverflow.com/questions/10664114/send-data-from-service-to-activity-and-screen-rotation – AbdulHannan
Ich benutze Bindemittel für Bind-Service und Aktivität. –