Sto costruendo un lettore musicale che utilizza un servizio per la riproduzione. Ho un'interfaccia utente di Attività che controlla (riproduci, metti in pausa, accanto, ...) il servizio. Desidero aggiornare l'interfaccia utente dal mio servizio quando viene premuto il pulsante successivo o precedente. Ho pensato di passare un valore intero. Ecco il mio codice:Invia dati dal servizio all'attività Android
Ho usato un messenger per la comunicazione. Il codice nel mio servizio si presenta come:
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);
}
}
}
mio metodo che io chiamo il click del pulsante successivo:
public synchronized void playnext() {
reset();
if(songIndex < (songsList.size() - 1)) {
songIndex += 1;
playSong(songIndex);
} else {
songIndex = 0;
playSong(songIndex);
}
emit(Event.NextSongChanged);
}
Appena ho generato l'evento NextSongChanged voglio passare il "songIndex" variabile nella mia attività. Qualche idea su come ottenere questo?
Il mio codice di attività per gestire l'evento:
codiceprivate 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
Uso il binder per il servizio e l'attività di bind. –