我正在玩一个小型的Android应用程序,应该可以播放两个不同的音频文件。
已经有效:
我可以点击两个开关中的一个并播放音频。
当我再次点击它时,它会暂停。
当我点击另一个开关时,正在运行的媒体播放器也会暂停。
但那时还有什么不起作用:
第二个音频现在应该开始,但事实并非如此。相反,开关保持关闭..(可能是因为onCompletion事件?)
我的代码:
/**
* Switches (play/pause music)
*/
private Switch sAUDIO1, sAUDIO2
/**
* Media Players (components to control MP3 playback)
*/
private MediaPlayer mpAUDIO1, mpAUDIO2
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_audio_playback);
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.tuAkzentfarbe1BlauHell)));
InitializeActivity();
}
/**
* Initialises widgets and event handlers
*/
private void InitializeActivity() {
sAUDIO1 = (Switch) findViewById(R.id.switchAUDIO1);
sAUDIO2 = (Switch) findViewById(R.id.switchAUDIO2);
sAUDIO1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
AUDIO1Toggled();
}
});
sAUDIO2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
AUDIO2Toggled();
}
});
mpAUDIO1 = MediaPlayer.create(this, R.raw.audio1);
mpAUDIO2 = MediaPlayer.create(this, R.raw.audio2);
mpAUDIO1.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
sAUDIO1.setChecked(false);
}
});
mpAUDIO2.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
sAUDIO2.setChecked(false);
}
});
}
/**
* Handle toggling of AUDIO 1 switch
*/
private void AUDIO1Toggled() {
if (sAUDIO1.isChecked()) {
sAUDIO2.setChecked(false);
PauseAUDIO2();
PlaybackAUDIO1();
} else {
PauseAUDIO1();
}
}
/**
* Starts playback of first audio
*/
private void PlaybackAUDIO1() {
mpAUDIO1.start();
}
/**
* Halts playback of first audio
*/
private void PauseAUDIO1() {
mpAUDIO1.pause();
}
/**
* Handle toggling of AUDIO 2 switch
*/
private void AUDIO2Toggled() {
if (sAUDIO2.isChecked()) {
sAUDIO1.setChecked(false);
PauseAUDIO1();
PlaybackAUDIO2();
} else {
PauseAUDIO2();
}
}
/**
* Starts playback of second audio
*/
private void PlaybackAUDIO2() {
mpAUDIO2.start();
}
/**
* Halts playback of second audio
*/
private void PauseAUDIO2() {
mpAUDIO2.pause();
}
答案 0 :(得分:0)
这是因为您从MediaPlayer获得相同的实例