재생을 위해 서비스를 사용하는 음악 플레이어를 만들고 있습니다. 나는 (재생, 일시 정지, 다음, ...) 서비스를 제어하는 Activity UI를 가지고있다. 다음 또는 이전 버튼을 누르면 서비스에서 UI를 업데이트하고 싶습니다. 난 정수 값을 전달 생각. 여기 내 코드는 다음과 같습니다.서비스에서 활동으로 데이터 전송 안드로이드
통신용 메신저를 사용했습니다. 내 서비스의 코드는 외모와 같은 :
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);
}
}
}
나는 다음 버튼을 클릭에 전화하고 내 방법 : 나는 "songIndex"를 전달하려는 순간 나는 NextSongChanged 이벤트를 화재로
public synchronized void playnext() {
reset();
if(songIndex < (songsList.size() - 1)) {
songIndex += 1;
playSong(songIndex);
} else {
songIndex = 0;
playSong(songIndex);
}
emit(Event.NextSongChanged);
}
을 내 활동에 대한 변수. 이것을 달성하는 방법에 대한 아이디어?
사건 처리하는 내 활동 코드 :
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
바인드 서비스 및 활동을 위해 바인더를 사용합니다. –