사용자가 특정 노래를 클릭 할 때마다 호출되는 활동 내에 MediaPlayer가 있습니다. MediaPlayer가 재생되면 사용자가 다시 클릭하면 다른 노래를 선택할 수 있습니다.Android MediaPlayer - 활동이 인스턴스화 될 때마다 원치 않는 새 인스턴스가 생성됩니다.
문제는 두 번째 노래를 선택하면 MediaPlayer가 다시 만들어지고 두 곡이 동시에 재생되기 시작한다는 것입니다. 나는 "MediaPlayer.isplaying, MediaPlayer.stop if"을 사용하려고 시도했지만, 사용자가 뒤로 누르고 다른 노래를 스크롤하자마자 MediaPlayer가 멈 춥니 다.
코드는 다음과 같습니다. 자바에 대한 이해가 제한되어 있으므로 답변을 기본으로 유지할 수 있다면 고맙겠습니다 (개발을 시도하고 있습니다!).
활동이 포함 MediaPlayer를 : 당신의 도움에 대한
package music.tabber;
import java.io.IOException;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
public class MusicPlayer extends Activity {
private ImageButton playButton;
private TextView songTitleLabel;
private TextView songArtistLabel;
private MediaPlayer mediaPlayer = new MediaPlayer();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.playing);
Bundle extras = getIntent().getExtras();
String songPath = extras.getString("songPath");
String songTitle = extras.getString("songTitle");
String songArtist = extras.getString("songArtist");
playButton = (ImageButton) findViewById(R.id.playButton);
songTitleLabel = (TextView) findViewById(R.id.songTitleLabel);
songArtistLabel = (TextView) findViewById(R.id.songArtistLabel);
playSong(songPath);
songArtistLabel.setText(songArtist);
songTitleLabel.setText(songTitle);
playButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
if(mediaPlayer.isPlaying()){
if(mediaPlayer!=null){
mediaPlayer.pause();
playButton.setImageResource(R.drawable.ic_play);
}
}else{
if(mediaPlayer!=null){
mediaPlayer.start();
playButton.setImageResource(R.drawable.ic_pause);
}
}
}
});
}
private void playSong(String songPath) {
try {
mediaPlayer.reset();
mediaPlayer.setDataSource(songPath);
mediaPlayer.prepare();
mediaPlayer.start();
// Changing Button Image to pause image
playButton.setImageResource(R.drawable.ic_pause);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
감사합니다.
답변 해 주셔서 감사합니다. Primož, 서비스에 대한 독서를해야 할 것입니다. 이것은 쉽게 구현할 수 있습니까? –
당신은 약간의 독서를해야 할 것이지만 실제로 나중에 그것을 구현하는 것이 간단합니다. [여기] (http://marakana.com/forums/android/examples/60.html)는 예입니다.) –